【发布时间】:2016-02-17 11:03:32
【问题描述】:
#include <stdio.h>
#include <math.h>
#define Hey {0.9501, 0.2311, 0.6068, 0.4860, 0.8913, 0.7621, 0.4565, 0.0185, 0.8214, 0.4447, 0.6154, 0.7919, 0.9218, 0.7382, 0.1763, 0.4057, 0.9355, 0.9169, 0.4103, 0.8936, 0.0579, 0.3529, 0.8132, 0.0099, 0.1389, 0.2028, 0.1987, 0.6038, 0.2722, 0.1988, 0.0153, 0.7468, 0.4451, 0.9318, 0.4660, 0.4186, 0.8462, 0.5252, 0.2026, 0.6721, 0.8381, 0.0196, 0.6813, 0.3795, 0.8318, 0.5028, 0.7095, 0.4289, 0.3046, 0.1897, 0.1934, 0.6822, 0.3028, 0.5417, 0.1509, 0.6979, 0.3784, 0.8600, 0.8537, 0.5936, 0.4966, 0.8998, 0.8216, 0.6449, 0.8180, 0.6602, 0.3420, 0.2897, 0.3412, 0.5341, 0.7271, 0.3093, 0.8385, 0.5681, 0.3704, 0.7027, 0.5466, 0.4449, 0.6946, 0.6213, 0.7948, 0.9568, 0.5226, 0.8801, 0.1730, 0.9797, 0.2714, 0.2523, 0.8757, 0.7373, 0.1365, 0.0118, 0.8939, 0.1991, 0.2987, 0.6614, 0.2844, 0.4692, 0.0648,0.9883}
float average(float Hello[]){
int i;
float sum;
for (i=0; i<100;i++) {
sum+= Hello[i];
}
return sum/100;
}
int main(){
printf("%f\n",average(Hey));
//所以这里编译器说的是预期的错误,但没有告诉我实际的错误是什么。我怀疑是因为我在代码一开始就有的向量定义不好。 }
是的,正如我在评论中所说,问题出在堆栈溢出中提到的 c 预处理。我对数组的预定义是不是错了?为什么?
【问题讨论】:
-
添加演员表:
average((float[])Hey)。另外,初始化你的变量并关闭你的}s。 -
@EOF 不起作用。初始化程序将仅在初始化变量时起作用。它是
C而不是C++,您需要初始化一个变量,然后将它的指针传递给函数。你不能制作这样的数组 -
@Zorgatone:嗯,它当然适用于 gcc。这是 gcc 扩展吗?我不知道。
-
@Zorgatone:嗯,一些测试表明它可以与
-std=c99一起使用,但不适用于-std=c89(两者都与-Wpedantic),所以我想你可以开始研究C99答案的标准。 -
@EOF:
(int []){ 1,2,3,4}之类的东西是 复合文字(自 C99 以来的标准)。(int [])部分不是强制转换,而是构造的一部分,它告诉编译器大括号中部分的类型。
标签: c arrays vector constants c-preprocessor