返回后可以写语句吗?

Is it possible to write statements after return?

本文关键字:语句 返回      更新时间:2023-10-16

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种以上方法的代码。当您需要进行调试时