【发布时间】:2022-01-23 03:48:39
【问题描述】:
在user.h
https://github.com/mit-pdos/xv6-riscv/blob/a1da53a5a12e21b44a2c79d962a437fa2107627c/user/user.h#L6
exit 只是系统调用以这种方式定义的
int exit(int) __attribute__((noreturn));
为什么退出函数声明需要这个?
【问题讨论】:
在user.h
https://github.com/mit-pdos/xv6-riscv/blob/a1da53a5a12e21b44a2c79d962a437fa2107627c/user/user.h#L6
exit 只是系统调用以这种方式定义的
int exit(int) __attribute__((noreturn));
为什么退出函数声明需要这个?
【问题讨论】:
我不认为noreturn 属性是严格要求的,但它会有所帮助。
noreturn 属性告诉编译器exit 函数永远不会返回。理论上,这可以让编译器更好地理解任何调用exit的代码的可能代码路径,从而可以显示更准确的警告并更好地优化代码。
【讨论】:
属性声明是一些编译器支持的 C 语言的扩展。那个特别的标记exit() 函数具有一个非常不寻常的特征,即它永远不会返回给它的调用者。
这种标记不是需要,但它有助于编译器更有效地优化和/或发出更准确的诊断信息。
【讨论】: