当我编译以下代码片段并运行它时,我希望它在第一行打印语句。 12也是。但那不会发生吗?为什么会这样?编译器如何处理if块中的注释?
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int a;
6 if (false)
7 cout << "This will not be printed." << endl;
8 cout << "This will be printed anyway." << endl;
9
10 if (false)
11 // comment
12 cout << "This should also be printed. But not. Why?" << endl;
13 a = 100;
14
15 cout << "a = " << a << endl;
16 }
产生
hyper150:~ 1041$ g++ what_if.cpp
hyper150:~ 1042$ ./a.out
This will be printed anyway.
a = 100
答案 0 :(得分:4)
在制作的母语代码中没有任何评论痕迹。
您的代码与此相同:
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int a;
6 if (false)
7 cout << "This will not be printed." << endl;
8 cout << "This will be printed anyway." << endl;
9
10 if (false)
11 cout << "This should also be printed. But not. Why?" << endl;
12 a = 100;
13
14 cout << "a = " << a << endl;
15 }
由于第10行[新代码]的条件从未得到满足 - 第11行的cout
从未发生
答案 1 :(得分:1)
它没有打印,因为你前面有if(false)
,if (false)
永远不会评估为真。
答案 2 :(得分:1)
编译器会忽略评论。
还有一个建议:在if
这样的语句中,即使只有一个语句,你写大括号也会更好。
if (false)
cout << "This should also be printed. But not. Why?" << endl;
写得更好:
if (false)
{
cout << "This should also be printed. But not. Why?" << endl;
// Most likely you are going to add more statements here...
}
答案 3 :(得分:0)
如果您不使用括号,if
将仅采用下一个表达式:
if (false)
cout << "This will not be printed." << endl;
cout << "This will be printed anyway." << endl;
if (false)
// comment
cout << "This should also be printed. But not. Why?" << endl;
a = 100;
相当于:
if (false)
{
cout << "This will not be printed." << endl;
}
cout << "This will be printed anyway." << endl;
if (false)
{
// comment
cout << "This should also be printed. But not. Why?" << endl;
}
a = 100;
在实际编译之前很久就删除了注释。
答案 4 :(得分:0)
如果你不使用大括号来包围条件结果,那么条件结果将以下一个语句的结尾终止,这通常意味着;字符。
但它不仅仅是;角色,因为你可以这样做(这真是太可怕了):
if (true)
for(int i = 0; i < 5; i++)
if (i == 4)
break;
else
h = i;
在这种情况下,for循环是下一个发生的语句,它是一个在h = i语句之后终止的迭代语句。
每个人都有自己的括号约定 - 我更喜欢只使用无括号if语句,如果只有一行不需要注释(如果有else语句,那么我使用括号)。
答案 5 :(得分:0)
代码优化是编译的一个阶段。在此期间,您的注释代码将从实际生成二进制文件的代码中删除。所以它把它解释为
if (false)
cout << "This should also be printed. But not. Why?" << endl;
你在if条件下放了一个假的......你知道后果。
答案 6 :(得分:0)
行结尾在C ++中并不重要; if
控制以下内容
声明。在第二种情况下,以下语句是输出,
所以不应该打印。评论不是陈述(一个是在
在实际解析之前用白色空格替换了事实。因此:
if ( false ) std::cout << "no" << std::endl;
if ( false )
std::cout << "no" << std::endl;
if ( false )
std::cout << "no" << std::endl;
不会输出任何内容。