C预处理器测试多个宏的定义性

43

我在网站上搜索了,但没有找到我要找的答案,所以这里有一个非常简单的问题。

我正在尝试做像这样的事情:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif
我该怎么做?我知道在32位和64位的Windows中都定义了_WIN32,所以对于Windows检测,我可以使用任意一个。我更感兴趣的是是否可以在预处理指令中使用类似逻辑运算符的东西,如果可以,那么如何实现呢?因为上面的代码不起作用。
在使用gcc编译时,我得到了以下警告信息:
“warning: extra tokens at end of #ifdef directive”,而且它基本上只使用第一个宏并忽略其余宏。
4个回答

68

试试这样做:

#if defined(_WIN32) || defined(_WIN64)
// do stuff
#endif

宏定义可以测试一个名称是否被定义,并允许您对结果应用逻辑运算符。 了解更多


7

你必须使用#if和特殊运算符defined


4
我认为可以通过这种方式实现:
#if defined block1 || defined block2 /*or any other boolean operator*/
   /*Code*/
#endif

更多信息请点击这里。该链接提供了关于预处理器指令在C语言中的逻辑用法的更多信息。

1

使用定义:

#if defined(A) || defined(B)
    #include <whatever.h>
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接