C 语言 _Noreturn 遇到的坑

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

_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
``
C语言泛型选择,内联函数,-Noreturn函数 title date tags categories C语言泛型选择,内联函数,_Noreturn函数 2020-04-08 02:57:40 -0700 泛型 内联函数 _Noreturn函数 C语言 泛型选择 关于泛型 泛型编程指那些... 阅读详情

相关推荐

嵌入式C语言noreturn属性:优化代码大小与提升可靠性的编译器提示技巧

在C/C++编程中,函数调用与返回机制是程序控制流的基础。编译器在生成代码时,通常假设函数执行后会返回调用点,并据此生成相应的栈帧管理和后续指令。然而,在嵌入式系统等资源受限场景中,存在一类特殊函数——如致命错误处理、系统复位或无限循环任务——它们永远不会返回。noreturn属性正是为此设计的编译器提示,它向编译器承诺函数不会返回,从而允许编译器进行死代码消除、抑制虚假警告,并优化栈帧分析。这一特性在嵌入式开发中尤为重要,能有效减少ROM占用、提升代码安全性。通过合理应用noreturn开发者可以引导编

chuannaoxuan4674的博客 388

C 语言 —— _Noreturn 关键字

C99 新增 inline 关键字时,它是唯一的函数说明符(关键字 extern 和 static 是存储类别说明符,可应用于数据对象和函数)。C11 新增了第2个函数说明符 _Noreturn,表明调用完成后函数不返回主调函数。exit() 函数是 _Noreturn 函数的一个示例,一旦调用 exit(),它不会再返回主调函数。 注意,这与 void 返回类型不同。void 类型的函数在执行完毕后返回主调函数,只是它不提供返回值。 _Noreturn 的目的是告诉用户和编译器,这个特殊的函数不会把控制返

柚咖小窝 3056

【C/C++ 关键字 函数说明符 】C/C++ _Noreturn关键字(表明调用完成后函数不返回主调函数)

在C++中,`_Noreturn`(在C++中通常写作`[[noreturn]]`)是一个函数属性,它表明函数在执行完毕后不会返回到调用者。这个关键字在C11和C++11中引入,用于标记那些不会返回的函数。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4108

noreturn c++ 引起报错

noreturn c++ 引起报错

jacke121的专栏 973

_Noreturn函数(C11)

C99新增inline关键字时,它时唯一的函数说明符(关键字extern和static时存储类别说明符,可应用于数据对象和函数)。C11新增了第二个函数说明符_Noreturn,表明调用完成后函数不返回主调函数。exit()函数时_Noreturn函数的一个示例,一旦调用exit()它不会再返回主调函数。注意,这与void返回类型不同。void类型的函数再执行完毕后返回主调函数,只是它不提供返回值...

qq_40162781的博客 6708

C语言(内联函数(C99)和_Noreturn

内联函数(C99)和_Noreturn

little_startoo的博客 863

__attribute__ noreturn

This attribute tells the compiler that the function won't ever return, and this can be used to suppress errors about code paths not being reached. The C library functions abort() and exit() are both

chinaclock的专栏 1230

C语言--__attribute__((noreturn))

1、 #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; void Fun_Exit(void) { exit(1); } int Fun_Test(int n) { if (n &gt; 0) { Fun_Exit(); printf("Hello World\r\n"); ...

tyustli 832

【C17 _Noreturn属性深度解析】:掌握函数无返回特性的底层原理与实战应用

掌握C17的_Noreturn属性,精准标识永不返回的函数,提升编译器优化与代码可靠性。适用于abort、自定义死循环等场景,通过声明函数无返回特性避免警告,增强程序可读性与安全性。深入解析语法用法与底层机制,值得收藏。

FuncLens的博客 1069

人大金仓数据库KingbaseES KES_SysRman中的noreturn函数属性

noreturn’是一个函数属性,用于告诉编译器某个函数不会正常返回到调用点,意味着函数被调用后,不会返回到调用它的地方,而是执行一些特定的操作,比如终止程序、抛出异常等。

arthemis_14的博客 1114

linux c 关键字 _Noreturn 简介

C99新增inline关键字时,它时唯一的函数说明符(关键字extern和static时存储类别说明符,可应用于数据对象和函数)。 C11新增了第二个函数说明符_Noreturn,表明调用完成后函数不返回主调函数。 exit()函数时_Noreturn函数的一个示例,一旦调用exit()它不会再返回主调函数。注意,这与void返回类型不同。void类型的函数再执行完毕后返回主调函数,只是它不提供返回值。 _Noreturn的目的是告诉用户和编译器,这个特殊的函数不会把控制返回主调程序,告诉用于以免滥用

whatday的专栏 1224

__attribute__((noreturn))

This attribute tells the compiler that the function won't ever return, and this can be used to suppress errors about code paths not being reached. The C library functions abort() and exit() are both d...

RToax 812

C/C++编程:__attribute__ noreturn

一些库函数,本身没有返回值,例如abort()和exit(),在编译的时候,GCC自动按照这个规则编译。而对于自己定义的函数,如果你不想让它有返回值,那么可以使用__attribute__ ((noreturn)) __attribute__ noreturn 这个属性告诉编译器函数不会返回。当遇到函数需要返回值却还没运行到返回值处就已退出来的情况,该属性可以避免出现错误信息。 用来抑制关于未达到代码路径的错误 C库函数中的abort()和exit()的声明格式就采用了这种格式: extern voi

OceanStar的博客 2793

深入理解C17 _Noreturn:编译器优化与代码安全的黄金连接点

掌握C17的_Noreturn属性,精准提示函数不返回,提升编译器优化与代码安全性。适用于终止程序类函数,减少警告,增强静态分析效果。深入理解其用法与优势,值得收藏。

VarChat的博客 615

_Noreturn属性使用陷阱,90%的C程序员都忽略的关键细节

掌握C17的_Noreturn属性使用技巧,避免程序未定义行为。详解其在终止函数中的应用、语法要求与编译器兼容性,揭示90%程序员忽略的关键细节,提升代码健壮性,值得收藏

LiteCompile的博客 508

你真的会用_Noreturn吗?3个真实项目案例告诉你答案

掌握C17的_Noreturn属性,避免程序未定义行为。本文通过3个真实项目案例,解析其在错误处理、系统调用和中断响应中的应用,提升代码安全与编译优化效果。你真的会用_Noreturn吗?值得收藏

PixelGlow的博客 851

深入解析C/C++中noreturn属性的编译器优化原理与嵌入式实战应用

在C/C++编程中,编译器优化是提升代码执行效率和减小二进制体积的关键技术。通过理解编译器的工作原理,开发者可以编写出更高效的代码。noreturn属性作为一种函数属性,允许开发者明确告知编译器某个函数永远不会返回,从而打破编译器保守的优化策略。这一机制基于控制流分析,当编译器确认某段代码不可达时,会进行死代码消除、栈帧优化等激进优化,显著减少冗余指令。在嵌入式开发和高性能计算领域,这种优化尤为重要,能有效节省宝贵的Flash和RAM资源,提升中断响应速度。本文以noreturn属性为例,结合编译器优化和嵌

weixin_33725515的博客 403

__attribute__((noreturn))的用法

外文地址:http://www.unixwiz.net/techtips/gnu-c-attributes.html __attribute__ noreturn    表示没有返回值 This attribute tells the compiler that the function won't ever return, and this can be used to

开挂的熊猫 1万+
上一篇: TCP三次握手四次挥手
下一篇: thymeleaf-spring5 javax.servlet.ServletException: Could not resolve view with name
Nishkata
博客等级 码龄7年 195粉丝 112原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值