为什么这个C数组初始化不能在g ++下编译?

Abr*_*ile 0 c c++ arrays initialization

我所有的代码都取自C项目.我无法在g ++下以任何方式编译它.

我该怎么办?

 enum EnumIndexID{
       ID_VALUE_A=2,
       ID_VALUE_B=2
 }

 struct newtype {
     enum MyEnumID eid;
     const char *name;
} table[] = {
     [ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
     [ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};
Run Code Online (Sandbox Code Playgroud)

raz*_*ebe 6

您确定您的编译器支持指定的初始化程序语法吗?

g ++没有.从那个超链接:

标准C89要求初始化程序的元素以固定顺序出现,与要初始化的数组或结构中的元素顺序相同.

在ISO C99中,您可以按任何顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C89模式的扩展.此扩展未在GNU C++中实现.


Che*_*Alf 5

以下编译为C99(注意:它无效为C89):

enum MyEnumID {
    MyEnumA, MyEnumB
};

enum EnumIndexID{
    ID_VALUE_A=2,
    ID_VALUE_B=2
};

struct newtype {
    enum MyEnumID eid;
    const char *name;
} table[] = {
    [ID_VALUE_A] = { MyEnumA, "ID_MSG_HeartbeatReq"},
    [ID_VALUE_B] = { MyEnumB, "ID_MSG_HeartbeatReq"},
};

int main() { return 0; }
Run Code Online (Sandbox Code Playgroud)

编辑:其他人已经注意到ID_VALUE_A并且ID_VALUE_B是相同的值,即2.这可能是您的代码中的错误.但是,gcc接受了这一点.

干杯&hth.,