当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《错误:初始化元素在加载时不可计算》经验,为你挑选了2个好方法。

我有一个带结构的函数,我试图将它的变量存储在一个数组中,但是当我运行gcc -Wall -ansi -pedantic-errors -Werror时我得到了这个

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

  return 0;
}

我得到错误:当我尝试编译上面的内容时,初始化元素在加载时是不可计算的.它对我来说很好,有什么不对?



1> Dan Lenski..:

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

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


Visual Studio没有正式支持[C99直到2013](http://blogs.msdn.com/b/vcblog/archive/2013/07/19/c99-library-support-in-visual-studio-2013.aspx) .只有14年的晚了.*刘海头*

2> Mike Thompso..:

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

int prm_arr[3];

prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;


在C89中是非法的,这是-ansi所暗示的标准; 在C99中合法,可以使用-std = c99而不是-ansi启用.
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有