为什么要支持指定的初始化程序没有被添加到g ++中有什么具体的原因吗? 是C99标准迟到的原因,g ++是早期开发的,后来人们不关心这个问题,还是在C ++语法中实现指定的初始化方法有一些固有的困难?
正如我在评论中指出的那样,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 ++ – 版本)