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