C 中什么时候应该使用函数属性 noreturn? [已关闭]

问题描述 投票:0回答:3

我最近发现了

noreturn
属性(我指的是 C 语言,而不是 C++ 语言;我正在开发一个 C 项目,该项目使用一个库,其中定义了等效项,并且它仅用于C 用法)。

什么时候使用

noreturn
属性被认为是好的做法?
在所有 void 函数声明中?有没有例外?

c function void
3个回答
10
投票

不要对您的

void
函数执行此操作,这会产生未定义的行为。

新的 C11 构造

_Noreturn
仅当您知道您的函数永远不会返回给调用者时才应使用。例如,当它无条件地调用
abort
exit
或类似方法时,或者当您进入无限循环时,就会出现这种情况。

这样做的目的是编译器可以优化calling侧的调用,特别是通过切断调用之后的整个执行分支。

通常

void
函数不是那种类型,它们返回给调用者,只是在返回时它们不提供将使用的值。对于大多数此类函数来说,声明它们是根本上错误的 C11 语法是

_Noreturn

或带有宏

noreturn
。并非所有编译器都实现了该功能,但大多数编译器都对 C99(或 C89)进行了扩展,提供了相同的功能。在这些平台上,您通常可以定义一个宏
noreturn
,它将是向上兼容的替代品。
    


6
投票

noreturn 属性平息了编译器警告。

为了回答你的问题,当函数永远不会返回(即无限 while 循环)并且你的编译器发出警告时,我会使用它。


2
投票

__declspec(noreturn)

__attribute__ ((noreturn));
当函数没有返回时告诉编译器它没有返回是一个好主意,这样它就可以进行一些优化,或者实际上避免某种优化。

_NoReturn

 为标准 
C11

© www.soinside.com 2019 - 2024. All rights reserved.