Bha*_*rat 13 c c++ linux gcc designated-initializer
是否有任何具体原因为什么没有将指定的初始值设定项添加到g ++?是因为C99标准迟到了,而g ++是早期开发的,之后人们不关心这个问题,或者在C++语法中实现指定的初始化器存在一些固有的困难?
Ani*_*dal 12
我今天遇到了同样的问题.g ++与-std = c ++ 11和c ++ 14确实支持指定的初始值设定项,但你仍然可以得到一个编译错误"test.cxx:78:9:抱歉,未实现:不支持非平凡的指定初始值设定项"如果你不要按照定义成员的顺序初始化结构.举个例子
struct x
{
int a;
int b;
};
// This is correct
struct x x_1 = {.a = 1, .b = 2};
// This will fail to compile with error non-trivial designated initializer
struct x x_2 = {.b = 1, .a = 2};
Run Code Online (Sandbox Code Playgroud)
C++不支持这一点.它似乎甚至不会出现在C++ 0x标准中:http://groups.google.com/group/comp.std.c++/browse_thread/thread/8b7331b0879045ad?pli = 1
另外,为什么要尝试用G ++编译Linux内核?
正如我在评论中指出的那样,G ++不支持C99标准指定的初始化程序,但它确实支持允许指定初始化程序的C90的GNU扩展.所以这不起作用:
union value_t {
char * v_cp;
float v_f;
};
union value_t my_val = { .v_f = 3.5f };
Run Code Online (Sandbox Code Playgroud)
但这样做:
union value_t my_val = { v_f: 3.5f };
Run Code Online (Sandbox Code Playgroud)
这似乎是C和C++标准委员会之间协调的不良互动(没有特别好的理由说明为什么C++不支持C99语法,他们只是没有考虑过它)和GCC政治(C++不应该' t支持C99语法只是因为它在C99中,但它应该支持GNU扩展语法,它实现了完全相同的东西,因为这是一个可以应用于任何一种语言的GNU扩展.