在 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 给它的调用者。
这样的标记不是需要的,但它有助于编译器,它旨在更有效地优化和/或发出更准确的诊断。
在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 给它的调用者。
这样的标记不是需要的,但它有助于编译器,它旨在更有效地优化和/或发出更准确的诊断。