在 xv6 源代码的 'user.h' 中使用 __attribute__((noreturn)) 作为退出函数声明?

Use of __attribute__((noreturn)) for the exit function declaration in 'user.h' of the xv6 source code?

user.h

https://github.com/mit-pdos/xv6-riscv/blob/a1da53a5a12e21b44a2c79d962a437fa2107627c/user/user.h#L6

exit 只是这样定义的系统调用 int exit(int) __attribute__((noreturn)); 为什么退出函数声明需要这个?

我认为 noreturn 属性不是必需的,但它有帮助。

noreturn 属性告诉编译器 exit 函数永远不会 return。理论上,这可以让编译器更好地理解任何调用exit的代码可能的代码路径,从而显示更准确的警告并更好地优化代码。

诸如此类的属性声明是某些编译器支持的 C 语言的扩展。那个特定的标记 exit() 函数具有非常不寻常的特征,即它永远不会 returns 给它的调用者。

这样的标记不是需要的,但它有助于编译器,它旨在更有效地优化和/或发出更准确的诊断。