C 语言

C 语言,第1张

C 语言

_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
``

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存