有人可以告诉我我做错了什么吗?
#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
有人可以告诉我我做错了什么吗?
#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
这个:
#if myvar == A
扩展为:
#if B == A
引用 C++ 标准:
由于宏扩展和定义的一元运算符的所有替换都执行完毕后,所有剩余的标识符和关键字,除了true和false,都被替换为 pp-number 0,然后将每个预处理标记转换为一个标记。
所以这相当于:
#if 0 == 0
这当然是真的。
预处理器表达式中的==
运算符不比较字符串或标识符,它只比较整数表达式。A
您可以通过为、B
和定义整数值来做您想做的事情myvar
,例如:
#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
尝试
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;
}
更多详情请参考以下链接