【问题标题】:Why is the condition in this simple program ignored when a comment is present?为什么在出现注释时忽略这个简单程序中的条件?
【发布时间】:2017-01-07 05:15:36
【问题描述】:

这个简单的程序应该什么都不打印:

#include <iostream>
int main()
{
    // the condition below is ignored! \\
    if (false)
        std::cout << "hello, world\n";
}

但是,使用我尝试过的所有编译器(gcc、clang、Sun CC、xlC)编译它会打印hello, world(后跟换行符)。删除注释时,程序按预期运行,即程序不打印任何内容。

为什么在评论存在时忽略条件(总是false)?

【问题讨论】:

    标签: c++


    【解决方案1】:

    \\ 正在转义换行符,并使if (false) 成为评论的一部分。

    作为解释,c++ 代码中一行末尾的\ 字符向预处理器表示下一行将被视为上一行的延续。因此,\ 有时被称为行继续符。这对于多行#defines 来说通常会派上用场。

    #define MY_LONG_MACRO \
        for(int i = 0; i < 10; i++) \
        { std::cout << "multi-line macro"; }
    

    【讨论】:

      【解决方案2】:

      单个\ 是一个行继续字符,表示下一行是该行的一部分。有多少\无所谓,只有最后一个使下一行成为第一行的一部分,之前的\只是注释的一部分。

      Demo

      【讨论】:

        【解决方案3】:

        那是因为\在行尾(没有字符甚至空格)后面跟着意味着下一行被认为是这一行的完成。

        这通常与字符串一起使用,例如:

        string s = "sdgfdgfdgfdg\
               dssdfsdf";
        

        如果在上面的单个反斜杠之后有一个空格,那么你会得到一个编译时错误。

        你可以在它之后添加空格,一切都会好的,例如:

        // the condition below is ignored! \\[white space]
        if (false)
            std::cout << "hello, world\n";
        

        【讨论】:

          猜你喜欢
          • 2013-10-17
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 2016-03-08
          • 2014-04-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多