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小时内删除。