我有一个带结构的函数,我试图将它的变量存储在一个数组中,但是当我运行gcc -Wall -ansi -pedantic-errors -Werror时我得到了这个
int detect_prm(Param prm) { int prm_arr[] = {prm.field1, prm.field2, prm.field3}; return 0; }
我得到错误:当我尝试编译上面的内容时,初始化元素在加载时是不可计算的 . 它对我来说很好,有什么不对?
这在C中是非法的 . 初始化列表必须是常量编译时表达式 . 请执行以下操作:
int prm_arr[3]; prm_arr[0] = prm.field1; prm_arr[1] = prm.field2; prm_arr[2] = prm.field3;
迈克的回答是完全正确的 .
但是,如果您能够使用GNU C扩展,或者使用更新更好的C99标准(使用 --std=c99 选项),那么这样的初始化程序是完全合法的 . C99标准已经推出了9年,大多数C编译器都支持它......特别是这个功能 .
--std=c99
2 回答
这在C中是非法的 . 初始化列表必须是常量编译时表达式 . 请执行以下操作:
迈克的回答是完全正确的 .
但是,如果您能够使用GNU C扩展,或者使用更新更好的C99标准(使用
--std=c99
选项),那么这样的初始化程序是完全合法的 . C99标准已经推出了9年,大多数C编译器都支持它......特别是这个功能 .