C预处理器testing多个macros的定义

我search了网站,但没有find我正在寻找的答案,所以这里是一个非常快速的问题。

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

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

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

用gcc编译我得到:

警告:#ifdef指令结尾的额外令牌,基本上只取第一个MACRO而忽略其余的。

尝试:

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

定义的macrostesting是否定义名称,并允许将逻辑运算符应用于结果。

你必须使用#if和特殊的操作符defined

我认为这应该是可能的:

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

更多信息在这里

您必须使用“if defined”而不是“ifdef”

 #if defined _WIN32 || defined _WIN64 

哎呀错字,你需要第二个“定义”这就是为什么你的testing失败。 把它定义为“defined _WIN32”是一个返回true / false的单个语句

使用定义:

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