gpt4 book ai didi

c - "initializer element is not constant"在 C99 的静态结构上使用指定的初始值设定项

转载 作者:太空宇宙 更新时间:2023-11-04 00:25:09 25 4
gpt4 key购买 nike

有人可以解释这种行为吗?

使用编译器标志 std=c99 我得到以下错误:

  • b1 的“初始化元素不是常量”。
  • “'.'之前的预期表达b2 的 token ”
  • b3 没问题。

当不使用 -std=c99 时,所有行都可以。不使用 static b1 时可以。我正在使用 GCC。

typedef struct A_tag {
int v;
int w;
} A;

typedef struct B_tag {
A super;
int x;
int y;
} B;

void test(){
static B b1 = ((B){.super={.v=100}, .x=10});
static B b2 = ({.super={.v=100}, .x=10});
static B b3 = {.super={.v=100}, .x=10};
}

最佳答案

(B){.super={.v=100}, .x=10} 不是“强制转换”,但作为一个整体,这是一个“复合文字”,一个临时对象只存在于相应的表达式中(基本上)。由于这不是常量而是临时对象,因此按照标准您不能用它进行初始化。

关于c - "initializer element is not constant"在 C99 的静态结构上使用指定的初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com