C++ 为什么赢了';t此C数组初始化在g++;?
大家好 我的代码取自一个C项目。我无法在g++下以任何方式编译它 我能用这个做什么C++ 为什么赢了';t此C数组初始化在g++;?,c++,c,arrays,initialization,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_V
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() {
.... lots of other code ...
}
第一个枚举定义后缺少分号 编辑
另外,出于某种原因。除了
枚举定义后缺少分号之外,表[]
声明在语法上不正确,将无法在G++上编译:
struct newtype {
enum MyEnumID eid;
const char *name;
} table[] = {
{ MyEnumA, "ID_MSG_HeartbeatReq"},
{ MyEnumB, "ID_MSG_HeartbeatReq"},
};
编辑:今天我学习了指定初始化。您确定您的编译器支持该语法吗
g++没有。
从该超链接:
标准C89要求初始值设定项的元素以固定顺序出现,与正在初始化的数组或结构中元素的顺序相同
在ISOC99中,您可以按任意顺序给出元素,指定它们所应用的数组索引或结构字段名,GNUC也允许将其作为C89模式的扩展此扩展未在GNU C++中实现。
以下代码编译为C99(注意:它与C89无效):
编辑:其他人注意到ID\u值A
和ID\u值B
是相同的值,即2。这可能是代码中的一个bug。然而,gcc接受这一点
欢呼和HTH,
如果这是纯C代码,我不认为C++标签属于那里。你没有提到你正在接受什么编译错误?IDIValueSua和IDuValueSub打算是一样的吗?GCC似乎对此没有任何问题,只是使用了最后一个初始值设定项。考虑到下面关于一些答案的讨论,如果您能更具体地介绍编译器,这将非常有用。版本号和平台将特别有用。您只需要它来链接(并且只有当您的项目是应用程序时),而不需要它来编译。它在语法上是正确的,并且在添加分号(当然还有MyEnumID的定义)后,在G++中可以很好地编译。不过,我不太明白编译器是如何在指定的初始值设定项中处理重复索引的。对不起,我弄错了。它显然受到GCC的支持,但不受G++的支持。由于它是纯C代码,我一开始没有使用G++。是的,我也是,我刚刚学习了指定的初始值设定项。G++不是默认设置为“GCC”编译吗?Ie“编译为C99减去一些,再加上一些GNU绒毛”。我确信它应该用默认编译器设置编译。NOPE,<代码> G++< /Cord>是C++编译器,与代码> GCC < /代码>不同。它也不编译为C++,它在GCC文档中被明确地表述。因此正确的GCC设置要么是-STD= GNU99,要么是STD= C99。您是正确的,这可能是一个错误,但是它是标准一致的。AFAIR是最后一个初始化的初始化,它至少在好的旧DEV C++ 4.9.可能您使用了错误的编译器设置?Dev-C++使用了GCC的mingw端口-可能端口中支持指定的初始值设定项?他没有详细介绍编译器或环境。我仍然怀疑这就是问题所在。
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; }