像结构一样初始化 typedef

Initialization of a typedef like a struct

这是一个代码片段:

typedef struct foo {
    int i;
    int o;
} foo;

int main() {
    foo bar2 = {
        .i = 42;
        .o= 24;
    };
    foo bar1;
    bar1.i = 42;
    bar1.o = 24;
}

我试图在声明中初始化变量 bar2,但没有成功。但是 struct bar1 的初始化工作得很好。 谁能告诉我为什么 foo2 的初始化会出现 SyntaxError?

初始化元素必须用逗号分隔,而不是分号, 然而,虽然 C(自 C99 起)支持指定的初始化程序,但标准 C++ 不支持它。参见 this question

你可以这样做:

foo bar2 = { 42, 24 };

一些 C++ 编译器可能支持这种来自 C 的指定初始化列表作为扩展——在这种情况下,语法将是:

foo bar2 = {.i = 42, .o= 24};