return
语句是main
中的最后一个语句,还是可以在返回后编写语句?
#include <iostream>
using namespace std;
int main() {
cout << "Hello" << endl;
return 0;
cout << "Bye" << endl;
}
此程序编译但只显示&#34; Hello&#34;。
答案 0 :(得分:4)
是否可以在返回后编写语句?
返回后编写更多语句是可能且有效的。使用gcc和Clang,即使使用-Wall
开关,我也不会收到警告。但Visual Studio确实为此程序生成warning C4702: unreachable code
。
return
statement终止当前函数,无论是main
还是其他函数。
即使写入有效,如果return
之后的代码无法访问,编译器也可能会根据as-if rule将其从程序中删除。
您可以有条件地执行return
语句,并且可以有多个return
语句。例如:
int main() {
bool all_printed{false};
cout << "Hello" << endl;
if (all_printed)
return 0;
cout << "Bye" << endl;
all_printed = true;
if (all_printed)
return 0;
}
或者,您可以在返回前后使用goto
和一些标签,在第二个输出后执行return
语句:
int main() {
cout << "Hello" << endl;
goto print;
return_here:
return 0;
print:
cout << "Bye" << endl;
goto return_here;
}
打印:
Hello
Bye
与this answer相关联的另一个解决方案是在返回后使用RAII进行打印:
struct Bye {
~Bye(){ cout << "Bye" << endl; } // destructor will print
};
int main() {
Bye bye;
cout << "Hello" << endl;
return 0; // ~Bye() is called
}
答案 1 :(得分:2)
是return语句是main中的最后一个语句还是可以在返回后写出语句?
执行return
语句的运行时行为与函数无关。无论是main
还是其他一些其他函数,当执行return
语句时,函数中都不会执行任何操作。
可以在return
语句之后编写语句。它们是多余的,因为它们没有被执行。智能编译器甚至可以在return
语句之后省略对应于语句的对象代码的创建。
答案 2 :(得分:2)
你可以像在你的例子中那样在返回之后编写语句,但它们永远不会被执行,并且一些编译器会给你一个警告“无法访问的代码”(例如 C4702 in VS2015)。
要在return语句后执行代码,请参阅Is it possible to execute code after return statement in C++?
答案 3 :(得分:1)
此类代码通常在中间件调试阶段生成,同时缩小窗口以捕获错误。它可以工作,但必须由程序员尽快修复。
答案 4 :(得分:0)
在&#34; return&#34;之后,你可以有用地获得代码的唯一方法。如果&#34;返回&#34;声明是有条件的。
if (error) return 0;
# All code invoked past this point knows error is false
这不是一个很好的编码风格,您可以创建有两种退出方式的代码。当你需要调试它时,你会发现放入标志更具挑战性,并且当我们退出时会发生什么。等等。