我知道我可以使用指定的初始化程序在 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++ 模式下不工作)。