我知道在C99中可以使用指定初始化器来初始化结构,就像这样:
typedef struct
{
char a;
char b;
int c;
} MyStruct;
MyStruct s = {.a = 1, .b = 2, .c = 3};
这段代码在我的C++编译器上无法运行,但是(俄罗斯)维基百科说它应该可以。
但出于某种奇怪的原因,像这样的代码也会编译(并且按预期工作):
typedef struct
{
char a;
char b;
int c;
} MyStruct;
MyStruct arr[5];
int main(void)
{
arr[0] = (MyStruct){.a = 1, .b = 2, .c = 0x332211};
}
我认为初始化应该只在对象创建时起作用,而不是之后。
这种行为是正常的,还是某种编译器怪癖?在C++中应该有效吗? 这个花括号里面到底是什么东西?一种临时的未命名结构体吗? 我正在使用Keil uVision 4(在C++模式下指定的初始化程序无法工作)。