_Noreturn 关键字告诉编译器这个函数不会返回
注意:不是说返回值为void就不会返回,这是两个概念
大部分返回值为void的函数执行到函数最后一行代码就会返回调用者,继续执行调用者的逻辑;
而部分函数(如:死循环,或者抛异常,或者直接退出程序)就永远不会返回调用者,调用者永远不会执行这部分函数调用过后剩下的代码
void fun()
{
while(1){};
}
int main()
{
fun();
int a = 1; //永远不会被执行
}
_Noreturn 使用错误示范:
#include <stdio.h>
_Noreturn void fun() { //这里就是bug之源
printf("a=0\n");
}
int main() {
int a = 0;
if (a == 0) {
fun();
} else if (a > 0) {
printf("a>0\n");
} else {
printf("a<0\n"); //按理说这里不应该出现,但是由于_Noreturn导致编译器优化带来一些问题,这里被输出了!!!
}
return 0;
}
输出:
a=0
a<0
``
388




被折叠的 条评论
为什么被折叠?



