有人可以解释这种行为吗?
使用编译器标志std=c99我得到以下错误:
什么时候不使用-std=c99所有行都行.当不使用静态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};
}
Run Code Online (Sandbox Code Playgroud)
(B){.super={.v=100}, .x=10}不是"演员",但作为一个整体,这是一个"复合文字",只是一个临时对象,只存在于相应的表达式中(基本上).由于这不是一个常量而是一个临时对象,按照标准你不能用它初始化.