【问题标题】:C++ #if #elif #endif don't seem to workC++ #if #elif #endif 似乎不起作用
【发布时间】:2013-10-06 02:27:07
【问题描述】:

谁能告诉我我做错了什么?

#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

【问题讨论】:

  • 这会切换调试输出吗?
  • 不,这只是一个人为的例子。

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


【解决方案1】:

这个:

#if myvar == A

扩展到:

#if B == A

引用 C++ 标准:

由于宏扩展和 defined 一元的所有替换 运算符已执行,所有剩余的标识符和关键字, 除了 truefalse,都替换为 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

【讨论】:

  • 谢谢 - 你知道我怎样才能实现我想要做的吗?
  • 谢谢。你能告诉我在哪里可以找到 C++ 标准的副本吗?即教我钓鱼:)
  • @rmp251:您可以获得 C++ 标准草案here。您可以从 ANSI 或您的国家标准机构购买官方标准的副本。另请参阅 ISO 委员会的home page
【解决方案2】:

试试

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

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2022-11-29
    • 2010-12-08
    • 2014-05-27
    • 1970-01-01
    相关资源
    最近更新 更多