题
我建设,需要收集关于Windows和Linux的应用程序。该应用程序是用C,几乎一切正常除了MinGW的编译器拒绝此
typedef struct somestruct{
...snip...
enum {NODE, REAL} type;
};
somestruct* something;
switch (something->type){
case NODE:
...stuff...;
break;
case REAL:
...otherstuff...;
break;
}
它说没有定义NODE和REAL, 但是,如果我提供一个范围解析
case somestruct::NODE
此编译使用MinGW 3.4.1,但失败,在Linux的gcc 4.1.2编译。这是简单的,需要用预处理器来解决或者是有一些其他的解释吗?编译器的问题
解决方案
如果你摆脱嵌套的,它应该可移植工作:
typedef enum somestruct_type {
somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
...snip...
somestruct_type type;
} somestruct;
我看到的代码非常类似于此被移植到大量的C和C ++编译器的。
(我并不是说这是做它的唯一方法,我只是说,这样的作品)。
其他提示
在应用程序是用“C”,但是编译器要求你做somestruct::NODE
,这是有效的“C ++”,但不是有效的“C”。
结论:您正在编译该代码使用MinGW在C ++中的模式,但在C模式中的所有其他的编译器
可能的原因:MinGW的可能不是治疗foo.C
和foo.c
一样的,和你的文件被命名为大写的C后缀(在UNIX上意味着C ++)
解决方案:添加-xc
标志MinGW的强制纯-C编译
不隶属于 StackOverflow