簡體   English   中英

為什么C數組初始化不能在g ++下編譯?

[英]Why won't this C array initialization compile under g++?

嗨,我所有的代碼都來自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"},
};

您確定您的編譯器支持Designated Initializer語法嗎?

g ++沒有。 從該超鏈接:

標准C89要求初始化程序的元素以固定順序出現,與要初始化的數組或結構中的元素順序相同。

在ISO C99中,您可以按任何順序指定元素,指定它們要應用的數組索引或結構字段名稱,GNU C也允許它作為C89模式的擴展。 此擴展未在GNU C ++中實現

以下代碼可以像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; }

編輯 :其他人注意到ID_VALUE_AID_VALUE_B是相同的值,即2。這可能是您的代碼中的錯誤。 但是,gcc接受這一點。

干杯,……

在第一個枚舉定義之后,您缺少分號。

編輯

而且, 事實證明,GCC支持此語法,但由於某些原因,G ++不支持該語法

除了在enum定義后缺少分號外, table[]聲明 在語法上也不正確, 因此無法在G ++上編譯:

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

編輯 :今天我已經了解了指定的初始化。

那么您至少需要一個入口點:

int main() {
.... lots of other code ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM