这个简单的程序应该清楚地打印出来:
#include <iostream>
int main()
{
// the condition below is ignored! \\
if (false)
std::cout << "hello, world\n";
}
然而,编译它会打印hello, world
(后跟换行符)和我尝试过的所有编译器(gcc,clang,Sun CC,xlC)。删除注释时,程序按预期运行,即程序不打印任何内容。
为什么条件(始终为false
)会因评论而被忽略?
答案 0 :(得分:14)
\\
正在转发换行符并正在发表评论的if (false)
部分。
作为解释,c ++代码中一行末尾的\
字符向预处理器表明下一行将被视为前一行的延续。因此,\
有时被称为行继续符。对于多行#defines来说,这通常很方便。
#define MY_LONG_MACRO \
for(int i = 0; i < 10; i++) \
{ std::cout << "multi-line macro"; }
答案 1 :(得分:2)
单个\
是一个行继续符,表示下一行是该行的一部分。无论有多少\
,只有最后一行使第一行的下一行成为一部分,之前的\
只是评论的一部分。
答案 2 :(得分:0)
这是因为在行尾的\
(没有字符甚至是空格)后面的意思是下一行被认为是完成了这一行。
这通常用于字符串,例如:
string s = "sdgfdgfdgfdg\
dssdfsdf";
如果上面的单个反斜杠之后有空格,那么你将得到一个编译时错误。
你可以在它之后添加空格,一切都会好的,例如:
// the condition below is ignored! \\[white space]
if (false)
std::cout << "hello, world\n";