使用64位编译器编译时奇怪的定义错误

时间:2015-10-15 23:09:25

标签: c windows gcc x86-64

我尝试使用64位MinGW GCC编译器来编译enigma套件(http://www.bytereef.org/enigma-suite.html)。 当我使用32位编译器时,一切正常。使用64位,我得到以下错误:

enigma\global.h|6|error: expected identifier or '(' before numeric constant|

并且有问题的一行是:

#define H 0

出于好奇,我将线路改为

#define H3 0 

它有效(当然在改变所有外观后)。任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:2)

MinGW 5.1标题为mingw32\i686-w64-mingw32\include\winnt.h。它包含带有6889行的结构定义:

DWORD H : 1;

当然,如果#define H 0包含更高的标题,则会出现问题。

MinGW 4.8没有这样的结构,所以在这里可以编译。

简单的解决方法是将#include <windows.h>移到hillclimb.c

之上