[英]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_A
和ID_VALUE_B
是相同的值,即2。這可能是您的代碼中的錯誤。 但是,gcc接受這一點。
干杯,……
除了在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.