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

时间:2009-06-08 16:14:27

标签: c c-preprocessor logical-operators preprocessor-directive

我搜索了网站,但没有找到我想要的答案,所以这是一个非常快速的问题。

我正在尝试做类似的事情:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif

我怎么能做这样的事情?我知道_WIN32是为32位和64位窗口定义的,所以我可以用于Windows检测。我更感兴趣的是我是否可以使用类似于预处理程序指令的逻辑运算符,如果是,如何,因为上述方法不起作用。

使用gcc编译我得到:

  

警告:#ifdef指令末尾的额外令牌,它基本上只占用第一个MACRO并忽略其余的。

5 个答案:

答案 0 :(得分:66)

尝试:

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

defined宏测试是否定义了名称,并允许您将逻辑运算符应用于结果。

答案 1 :(得分:7)

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

答案 2 :(得分:5)

您必须使用'if defined'而不是'ifdef'

#if defined _WIN32 || defined _WIN64

oops错字,你需要第二个'已定义',这就是你的测试失败的原因。 可以把它想象成'定义的_WIN32'是一个返回true / false的单个语句

答案 3 :(得分:4)

我认为应该可以这样:

#if defined block1 || defined block2 /*or any other boolean operator*/
   /*Code*/
#endif

更多信息here

答案 4 :(得分:1)

使用已定义:

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