为什么指定的初始化程序没有在g ++中实现

为什么要支持指定的初始化程序没有被添加到g ++中有什么具体的原因吗? 是C99标准迟到的原因,g ++是早期开发的,后来人们不关心这个问题,还是在C ++语法中实现指定的初始化方法有一些固有的困难?

Solutions Collecting From Web of "为什么指定的初始化程序没有在g ++中实现"

正如我在评论中指出的那样,G ++不支持C99标准指定的初始化程序,但它确实支持允许指定初始化程序的C90的GNU扩展。 所以这不起作用:

 union value_t { char * v_cp; float v_f; }; union value_t my_val = { .v_f = 3.5f }; 

但是这样做:

 union value_t my_val = { v_f: 3.5f }; 

这似乎是C和C ++标准委员会(C ++不支持C99语法,他们只是没有考虑它)没有特别好的理由和GCC政治(C ++ shouldn' t只支持C99语法,因为它是用C99编写的,但它应该支持GNU扩展语法,因为这是可以应用于任何一种语言的GNU扩展。

我今天遇到了同样的问题。 g ++与-std = c ++ 11和c ++ 14不支持指定的初始值设定项,但是如果你还可以得到一个编译错误“test.cxx:78:9:sorry,未实现:不重要的指定初始值设定项”不要按照成员定义的顺序初始化结构体。 举个例子

 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}; 

C ++不支持这个。 它甚至不会出现在C ++ 0x标准中: http : //groups.google.com/group/comp.std.c++/browse_thread/thread/8b7331b0879045ad?pli=1

另外,你为什么要用G ++编译Linux内核?

至少在g ++ – 4.8中这是默认支持的。

根据http://gcc.gnu.org/c99status.html指定的初始值设定项已经被执行。

你使用什么版本的g ++? (尝试g ++ – 版本)