返回后是否可以编写语句?

时间:2018-04-25 16:23:27

标签: c++ function main

return语句是main中的最后一个语句,还是可以在返回后编写语句?

#include <iostream>

using namespace std;

int main() {

    cout << "Hello" << endl;

    return 0;

    cout << "Bye" << endl;
}

此程序编译但只显示&#34; Hello&#34;。

5 个答案:

答案 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

这不是一个很好的编码风格,您可以创建有两种退出方式的代码。当你需要调试它时,你会发现放入标志更具挑战性,并且当我们退出时会发生什么。等等。