C ++ #if #elif #endif似乎不起作用

时间:2013-10-06 02:27:07

标签: c++ if-statement c-preprocessor preprocessor-directive

有人可以告诉我我做错了吗?

#include <iostream>
using namespace std;

int main() {

#define myvar B

#if myvar == A
        cout << "A" << endl;
#elif myvar == B
        cout << "B" << endl;
#else
        cout << "Neither" << endl;
#endif
}

输出是A但显然我期待B

2 个答案:

答案 0 :(得分:10)

此:

#if myvar == A

扩展为:

#if B == A

引用C ++标准:

  

由于宏扩展和定义一元的所有替换后   运算符已执行,所有剩余的标识符和关键字,   除 true false 外,将替换为pp-number 0 ,然后   每个预处理令牌都转换为令牌。

这相当于:

#if 0 == 0

这当然是真的。

预处理程序表达式中的==运算符不比较字符串或标识符,它只比较整数表达式。您可以通过定义ABmyvar的整数值来执行您要执行的操作,例如:

#define A 1
#define B 2
#define myvar B

#if myvar == A
    cout << "A" << endl;
#elif myvar == B
    cout << "B" << endl;
#else
    cout << "Neither" << endl;
#endif

答案 1 :(得分:1)

int main(void) {
    #define myvar 2
    #if myvar == 1
            std::cout << "A" << std::endl;
    #elif myvar == 2
            std::cout << "B" << std::endl;
    #else
            std::cout << "Neither" << std::endl;
    #endif
    return 0;
}

更多详情请参阅以下链接

http://msdn.microsoft.com/en-us/library/ew2hz0yd.aspx