将 [[noreturn]] 添加到主函数是否有意义



我了解,C++属性[[noreturn]]可以应用于不返回给调用方的函数,以便编译器可以生成更优化的代码。我确实知道它对"正常"功能有所不同,但想知道将其应用于main函数时它是否也会对性能产生影响。

假设我想编写一个持续运行的程序,它不会中止(这意味着main函数永远不会返回调用方(= 操作系统(

其中哪一个会生成更快(更优化(的代码,或者根本没有区别?

选项 1:

int main()
{
    while(true)
    //..
    return 0;
}

选项 2:

[[noreturn]] int main()
{
    while(true)
    //..
    return 0;
}
noreturn 主要

对函数的调用者有用,而不是函数本身,在main()的情况下,main()的调用者是现成的C++运行时,因此编译器无法编译它,因此那里没有什么可以优化的。

但是,在您的main()中获得一个小好处,因为从理论上讲,noreturn版本将产生略小的代码,因为编译器可以省略称为尾声的指令序列。

这些性能(速度/大小(增益是微不足道的,并不值得关注。 更有趣的是,如果您在调用 noreturn 函数后立即编写了任何代码,则可能会收到警告。在这种情况下,编译器应该能够警告您,您的此代码将永远不会执行。 我发现这更有用。

noreturn 属性应该用于不返回给调用方的函数。这并不意味着 void 函数(它们确实返回给调用方 - 它们只是不返回值(,而是控制流在函数完成后不会返回到调用函数的函数(例如退出应用程序的函数、永远循环或抛出异常(。

编译器可以使用它来进行一些优化并生成更好的警告。例如,如果 f 具有 noreturn 属性,编译器可以在您编写 f(( 时警告您 g(( 是死代码;g();.类似地,编译器将知道在调用 f(( 后不要警告您缺少返回语句。

从 什么是不归路?

编辑:

要清楚地到岗位上。我认为在主要情况下使用不回报有一个很小的好处,但这是一种不好的做法。在 C/C++ 中,如果一切正常,您必须在主要return 0;

相关内容

  • 没有找到相关文章

最新更新