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