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

rmp*_*251 2 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
}
Run Code Online (Sandbox Code Playgroud)

输出是A,但显然我期待B

Kei*_*son 11

这个:

#if myvar == A
Run Code Online (Sandbox Code Playgroud)

扩展为:

#if B == A
Run Code Online (Sandbox Code Playgroud)

引用C++标准:

在由于宏扩展和已定义的一元运算符执行的所有替换之后,除了truefalse之外的所有剩余标识符和关键字都被替换为pp-number 0,然后每个预处理标记被转换为标记.

所以这相当于:

#if 0 == 0
Run Code Online (Sandbox Code Playgroud)

这当然是真的.

==预处理程序表达式中的运算符不比较字符串或标识符,它只比较整数表达式.你可以做你试图通过定义为整数值做什么A,Bmyvar,例如:

#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
Run Code Online (Sandbox Code Playgroud)