【问题标题】:C++ else statement only if Macro is define仅当定义了宏时才使用 C++ else 语句
【发布时间】:2017-08-20 18:43:12
【问题描述】:

我正在尝试执行 if/else 语句。但我想将 else 语句包装在 #ifdef 宏测试中。

if (check1)
{
...
}
#ifdef MACRO
else 
{...}
#endif

这是允许的吗?

【问题讨论】:

  • 是的,这是允许的,但为什么要这样做?
  • 我正在添加实验代码,我需要旧代码才能继续
  • 打赌你可以用模板做到这一点——你已经标记了 C++14。宏来自 1970 年代。
  • 代码已经在使用模板,这需要进行大量更改。使用宏,我可以分离实验代码。至少这是我的理解/希望。
  • 我认为最好的验证方法是编译你的代码。如果编译则调试并查看MACRO 中的代码是否被跳过。你会得到答案的。

标签: c++ c++11 c-preprocessor c++14


【解决方案1】:

预处理器在编译器之前运行。如果预处理器评估宏并生成有效的 c/c++ 代码(如您包含的示例),则它是有效的用法。

【讨论】:

    【解决方案2】:

    当然可以,它是C。预处理器在编译器之前评估这个,所以编译器只看到这个

    if (check1)
    {
    ...
    }
    

    但你不能/不应该这样做

    #ifdef MACRO
    if (check1)
    {
    ...
    }
    #endif
    else 
    {...}
    

    【讨论】:

      【解决方案3】:

      这是允许的吗?

      是的,这是有效的。你有什么特别的疑问?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-29
        • 1970-01-01
        • 2018-09-20
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多