当评论出现时,为什么忽略这个简单程序中的条件?

时间:2017-01-06 20:45:14

标签: c++

这个简单的程序应该清楚地打印出来:

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

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

为什么条件(始终为false)会因评论而被忽略?

3 个答案:

答案 0 :(得分:14)

\\正在转发换行符并正在发表评论的if (false)部分。

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

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

答案 1 :(得分:2)

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

Demo

答案 2 :(得分:0)

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

这通常用于字符串,例如:

string s = "sdgfdgfdgfdg\
       dssdfsdf";

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

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

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