C 语⾔_Noreturn 遇到的坑
_Noreturn 关键字告诉编译器这个函数不会返回
注意:不是说返回值为void就不会返回,这是两个概念
⼤部分返回值为void的函数执⾏到函数最后⼀⾏代码就会返回调⽤者,继续执⾏调⽤者的逻辑;
⽽部分函数(如:死循环,或者抛异常,或者直接退出程序)就永远不会返回调⽤者,调⽤者永远不会执⾏这部分函数调⽤过后剩下的代码_Noreturn 使⽤错误⽰范:void fun (){ while (1){};}int main (){ fun (); int a = 1; //永远不会被执⾏}
1
2
3
4
5
6
7
8
9#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 =0a <0``1c语言return的用法和搭配
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论