return
语句是 main
中的最后一个语句,还是返回后可以写语句?
#include <iostream>
using namespace std;
int main() {
cout << "Hello" << endl;
return 0;
cout << "Bye" << endl;
}
此程序编译,但仅显示" Hello"。
返回后可以写语句吗?
返回后编写更多语句是可能和有效的。使用GCC和Clang,即使使用-Wall
开关,我也不会发出警告。但是Visual Studio确实为此程序产生warning C4702: unreachable code
。
return
语句终止当前功能,无论是main
还是其他功能。
即使编写有效,如果return
之后的代码无法实现,则编译器可以按照AS-IF规则从程序中消除它。
您可以有条件执行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
在此答案中链接的另一个解决方案是使用raii在返回后打印:
struct Bye {
~Bye(){ cout << "Bye" << endl; } // destructor will print
};
int main() {
Bye bye;
cout << "Hello" << endl;
return 0; // ~Bye() is called
}
返回语句是main内部的最后一个语句,还是可以在返回后写语句?
执行return
语句的运行时间行为与该函数无关。无论是main
还是其他其他功能,执行return
语句时,此后什么都没有在功能中执行。
可以在return
语句之后编写语句。它们是多余的,因为它们没有执行。智能编译器可能甚至能够省略与return
语句之后语句相对应的对象代码的创建。
您可以像示例一样在返回之后编写语句,但是它们将永远不会执行,有些编译器会给您警告"无法实现的代码"(例如VS2015中的C4702(。
要在返回语句后执行代码,请参见在c ?
这种代码通常在中间体调试阶段生成,同时缩小窗口以捕获错误。它有效,但必须由程序员尽快确定。
"返回"后唯一可以使用代码的方法是"返回"语句是有条件的。
if (error) return 0;
# All code invoked past this point knows error is false
这不是很好的编码样式,您正在创建有2种以上方法的代码。当您需要进行调试时