返回后可以写语句吗?
Is it possible to write statements after return?
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种以上方法的代码。当您需要进行调试时
- 返回语句后的代码,没有警告
- 三元运算符在返回语句中给出意外的结果
- 返回非 void 的函数中没有返回语句警告
- 如何使用单个返回语句返回对变量的引用
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 获取上次执行的返回语句的行
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 如何在 c++ 中从 switch 语句返回不同类型的变量
- Qt SQL LIKE语句返回错误
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- 为什么返回语句和打印语句返回不同的答案?
- if-else 语句返回相同的反馈
- 为什么此范围基于语句返回一个数字太低的范围
- C++选择语句返回 true
- C++开关语句返回奇怪的值
- 这个语句返回什么
- 空的C++if语句返回零值
- 从if语句返回数据
- If语句返回错误的输出C++
- 返回语句返回一个空指针值而不是期望的值