1

我正在构建一个需要在 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 编译。这只是一个需要用预处理器解决的编译器问题还是有其他解释?

4

2 回答 2

6

该应用程序是用“C”编写的,但编译器要求您这样做somestruct::NODE,这是有效的“C++”,但不是有效的“C”。

结论:您在 C++ 模式下使用 MinGW 编译此代码,但在 C 模式下使用所有其他编译器。

可能的原因:MinGW 可能不一样,foo.C并且foo.c您的文件以大写 C 后缀命名(这意味着 UNIX 上的 C++)。

解决方案:向 MinGW 添加-xc标志以强制进行纯 C 编译。

于 2009-05-14T03:48:49.943 回答
3

如果你摆脱了嵌套,它应该可以移植:

typedef enum somestruct_type {
    somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
   ...snip...
   somestruct_type type;
} somestruct;

我已经看到与此非常相似的代码被移植到大量 C 和 C++ 编译器。

(我并不是说这是唯一的方法;我只是说这种方法有效)。

于 2009-05-13T16:50:12.743 回答