使用 GCC 扩展定义

Expand defines with GCC

例如,我如何展开或折叠头文件中的定义

#define IOC_IN 0x80000000
#define IOC_WS2 0x08000000
#define _WSAIOW(x,y)(IOC_IN|(x)|(y))
#define SIO_ASSOCIATE_HANDLE _WSAIOW(IOC_WS2,1)

我试过 gcc -E file.h > output.h 但是这会输出一个空文件。我正在使用 MingW 编译器。

我希望定义被替换成这样:

#define IOC_IN 0x80000000
#define IOC_WS2 0x08000000
#define _WSAIOW(x,y)(IOC_IN|(x)|(y))
#define SIO_ASSOCIATE_HANDLE (IOC_IN|(IOC_WS2)|(1))

定义 "in the header" 不是 "expanded",您希望发生什么?

相反,使用它们的地方将被预处理以插入定义。

您通常会预处理 C 文件,而不是 header,即在未定义的情况下使用 #define 的文件。

GCC(实际上是预处理器)忽略您的定义,因为它们未被使用。尝试附加 int x = SIO_ASSOCIATE_HANDLE; 并重新运行 gcc。