C++ C++;预处理器决策

C++ C++;预处理器决策,c++,c-preprocessor,C++,C Preprocessor,对不起,我知道这是基本的,但也许它不存在,或者我没有用谷歌搜索正确的单词。 是否有一个如果没有(这是ifndef?)一个和以及一个或,这样我就可以做类似的事情: if not DEBUG and MACOS #ifndef和#if做不同的事情,所以这取决于你想要什么#如果未定义与以下名称匹配的预处理器符号,则ifndef为真#if为真 您可以使用标准的&&和| |运算符。我认为类似于#if!已定义(调试)和已定义(MACOS)应能完成 #if !DEBUG && MACROS 或 取决于你在寻

对不起,我知道这是基本的,但也许它不存在,或者我没有用谷歌搜索正确的单词。 是否有一个
如果没有
(这是
ifndef
?)一个
以及一个
,这样我就可以做类似的事情:

if not DEBUG and MACOS
#ifndef和#if
做不同的事情,所以这取决于你想要什么<代码>#如果未定义与以下名称匹配的预处理器符号,则ifndef
为真<当以下预处理器表达式的计算结果为非零时,code>#if
为真


您可以使用标准的&&和| |运算符。

我认为类似于
#if!已定义(调试)和已定义(MACOS)
应能完成

#if !DEBUG && MACROS

取决于你在寻找什么。defined()也有帮助

#if !defined(DEBUG) && defined(MACROS)
测试,如果定义了这些宏/值(甚至设置为0表示已定义)。省略“defined()”并根据宏再次测试一个值,如

#if DEBUG==0 && MACOS==1
#error "Spam!"
#endif
#如果!(已定义(调试)和已定义(MACOS))

#如果!已定义(调试)&!已定义(MACOS)


取决于您试图评估的内容。

查看Boost预处理库。它可以使用预处理器完成大量任务。

\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
#if DEBUG==0 && MACOS==1
#error "Spam!"
#endif
#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