我建设,需要收集关于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.Cfoo.c一样的,和你的文件被命名为大写的C后缀(在UNIX上意味着C ++)

解决方案:添加-xc标志MinGW的强制纯-C编译

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top