我最近发现了
noreturn
属性(我指的是 C 语言,而不是 C++ 语言;我正在开发一个 C 项目,该项目使用一个库,其中定义了等效项,并且它仅用于C 用法)。
什么时候使用
noreturn
属性被认为是好的做法?不要对您的
void
函数执行此操作,这会产生未定义的行为。
新的 C11 构造
_Noreturn
仅当您知道您的函数永远不会返回给调用者时才应使用。例如,当它无条件地调用abort
、exit
或类似方法时,或者当您进入无限循环时,就会出现这种情况。
这样做的目的是编译器可以优化calling侧的调用,特别是通过切断调用之后的整个执行分支。
通常
void
函数不是那种类型,它们返回给调用者,只是在返回时它们不提供将使用的值。对于大多数此类函数来说,声明它们是根本上错误的。
C11 语法是 _Noreturn
或带有宏
noreturn
。并非所有编译器都实现了该功能,但大多数编译器都对 C99(或 C89)进行了扩展,提供了相同的功能。在这些平台上,您通常可以定义一个宏noreturn
,它将是向上兼容的替代品。noreturn 属性平息了编译器警告。
为了回答你的问题,当函数永远不会返回(即无限 while 循环)并且你的编译器发出警告时,我会使用它。