抱歉,我知道这是基本的,但也许它不存在或者我没有用Google搜索正确的单词。
是否有if not
(是ifndef
?)AND
和OR
所以我可以这样做:
if not DEBUG and MACOS
答案 0 :(得分:13)
我认为#if !defined(DEBUG) && defined(MACOS)
之类的东西应该这样做。
答案 1 :(得分:3)
#ifndef and #if
做不同的事情,这取决于你想要什么。如果没有与后面的名称匹配的已定义预处理程序符号,则#ifndef
为true。当以下预处理程序表达式求值为非零时,#if
为真。
您可以使用标准&&和||运算符。
答案 2 :(得分:3)
#if !defined(DEBUG) && defined(MACOS)
#error "Ouch!"
#endif
测试,如果定义了这些宏/值(甚至设置为0表示已定义)。省略“已定义()”并再次测试一个值,具体取决于您的宏,如
#if DEBUG==0 && MACOS==1
#error "Spam!"
#endif
答案 3 :(得分:2)
#if !DEBUG && MACROS
或
#if !DEBUG & !MACROS
取决于您要找的内容。 defined()也可以帮助
#if !defined(DEBUG) && defined(MACROS)
答案 4 :(得分:1)
#if !(defined(DEBUG) && defined(MACOS))
或
#if !defined(DEBUG) && !defined(MACOS)
取决于您要评估的内容。
答案 5 :(得分:1)
#if
,#else
和#endif
是一般的。
使用#define
声明并#undef
取消声明。
使用#ifdef
检查是否已声明并且#ifndef
要检查,如果未声明。
示例:
#ifndef LABEL
#define LABEL some_value // declares LABEL as some_value
#else
#undef LABEL // undeclare previously declared LABEL...
#define LABEL new_value // to declare a new_value
#endif
答案 6 :(得分:0)
查看Boost预处理库。它可以使用预处理器完成大量任务。