C ++预处理器决策

时间:2010-06-11 17:05:00

标签: c++ c-preprocessor

抱歉,我知道这是基本的,但也许它不存在或者我没有用Google搜索正确的单词。 是否有if not(是ifndef?)ANDOR所以我可以这样做:

if not DEBUG and MACOS

7 个答案:

答案 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预处理库。它可以使用预处理器完成大量任务。