错误:初始化元素在加载时无法计算
时间:2020-03-06 15:00:38 来源:igfitidea点击:
我有一个采用结构的函数,并且我试图将其变量存储在数组中,但是当我运行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编译器都很好地支持它……尤其是此功能。