【发布时间】:2013-10-09 12:36:20
【问题描述】:
我知道我可以使用指定的初始化程序在 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++ 模式下不工作)。
【问题讨论】:
-
你的编译器是什么?海湾合作委员会?
-
请添加维基百科所说的链接。另外,您真的在询问两种语言(C 和 C++)吗?
-
@YuHao 我的编译器是 Keil uVision(我已经在上面写过)
-
这些是指定的初始化器与复合文字相结合。它在 C 中有效,而不是 C++。 LINK
-
@Amomum:我看不懂俄语,但我没有在该页面上看到任何指定初始化程序的示例。 English version 正确地将它们提到为 C++ 中不存在的 C 构造。