【发布时间】:2015-05-19 14:29:59
【问题描述】:
写我的this question,我无法交叉检查输出。
执行后我得到了一些错误的打印语句。有人可以告诉我printf() 语句是错误的还是我正在做的逻辑是错误的。
代码:
int64_t arr[2] = {227802,9896688};
int64x2_t check64_2 = vld1q_s64(arr);
for(int i = 0;i < 2; i++){
printf("check64_2[%d]: %ld\n",i,check64_2[i]);
}
int64_t way1 = check64_2[0] + check64_2[1];
int64x1_t way2 = vset_lane_s64(vgetq_lane_s64(check64_2, 0) + vgetq_lane_s64(check64_2, 1), way2, 0);
int64x1_t way3 = vadd_s64(vget_high_s64 (check64_2),vget_low_s64 (check64_2));
printf("way1 :%ld \n",way1);
printf("way2 :%ld \n",way2);
printf("way3 :%ld \n",way3);
输出:
check64_2[0]: 227802
check64_2[1]: 9896688
way1 :0
way2 :0
way3 :0
警告:
warning:format '%ld' expects argument of type 'long int', but argument 3 has type '__builtin_neon_di'printf("check64_2[%d]: %ld\n",i,check64_2[i]);
warning:format '%ld' expects argument of type 'long int', but argument 2 has type 'int64_t {aka long long int}' [-Wformat=]
printf("way1 :%ld \n",way1);
^
谁能告诉我如何使用 log/printf 消息来确认逻辑。
【问题讨论】:
-
您也许可以将这些值转换为对应的 printf 预期类型:
printf("check64_2[%d]: %ld\n", i, (long)check64_2[i]);...printf("way1 :%ld\n", (long)way1); -
或者使用
"%lld",正如第二条错误消息所暗示的那样。