14

我有一个采用结构的函数,我试图将其变量存储在数组中:

int detect_prm(Param prm) {
  int prm_arr[] = {prm.field1, prm.field2, prm.field3};

  return 0;
}

但是gcc -Wall -ansi -pedantic-errors -Werror我收到以下错误:

初始化元素在加载时不可计算

在我看来很好,有什么问题?

4

2 回答 2

16

迈克的回答是绝对正确的。

但是,如果您能够使用 GNU C 扩展,或者改用更新更好的 C99 标准(使用--std=c99选项),那么像这样的初始化程序是完全合法的。C99 标准已经推出了 9 年,大多数 C 编译器都很好地支持它……尤其是这个特性。

于 2008-10-02T05:39:16.743 回答
15

这在 C 中是非法的。初始化列表必须是常量编译时表达式。请改为执行以下操作:

int prm_arr[3];

prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;
于 2008-10-02T05:13:50.690 回答