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

发布于 2024-07-07 16:07:18 字数 304 浏览 18 评论 0原文

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

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

  return 0;
}

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

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

它对我来说看起来很好,有什么问题吗?

I have a function that takes a struct, and I'm trying to store its variables in array:

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

  return 0;
}

But with gcc -Wall -ansi -pedantic-errors -Werror I get the following error:

initializer element is not computable at load time

It looks fine to me, what's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独木成林 2024-07-14 16:07:19

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

int prm_arr[3];

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

This is illegal in C. Initializer lists must be constant compile time expressions. Do the following instead:

int prm_arr[3];

prm_arr[0] = prm.field1;
prm_arr[1] = prm.field2;
prm_arr[2] = prm.field3;
后来的我们 2024-07-14 16:07:19

迈克的回答绝对正确。

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

Mike's answer is absolutely right.

However, if you're able to use the GNU C extensions, or to use the newer and better C99 standard instead (use the --std=c99 option), then initializers such as this are perfectly legal. The C99 standard has been out for, well, 9 years, and most C compilers support it quite well... especially this feature.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文