不可重入函数

C语言数据类型

/* RT-Thread version information */
#define RT_VERSION                      3L              /**< major version number */
#define RT_SUBVERSION                   1L              /**< minor version number */
#define RT_REVISION                     5L              /**< revise version number */

这里的L表示该数值为 ‌长整型(long)字面量‌
1 数据类型明确性‌
L 后缀显式声明该常量为 long 类型,确保编译器将其视为固定位宽的长整型而非默认的 int 类型,避免因编译环境差异导致的隐式类型转换问题
‌2 跨平台兼容性保障‌
嵌入式系统中不同架构(如ARM7/Cortex-M)的 int 类型位宽可能不同(16/32位),而 long 通常固定为32位。显式使用 L 后缀可统一版本号的数据类型,增强代码在异构硬件平台上的可移植性与可靠性
‌3 与RT-Thread数据类型体系匹配‌
RT-Thread自定义了基础数据类型(如 rt_int32_t、rt_uint32_t),这些类型在多数组架构下等效于 long。通过 L 后缀声明版本号,可直接与系统内部数据类型兼容,减少类型转换开销

同样的,U表示无符号,因为默认是int,加U就是无符号的int。

不可重入概念

不可重入‌ 的本质在于其依赖的‌共享全局状态‌在并发执行时会被破坏,导致计算结果不可靠甚至程序崩溃。

所以不可重入的意思是:因为资源共享,所以重入会导致错误发生,而不是资源锁死,第二次无法占用资源。
但上面的说法不够专业化,准啊也说法如下:
“不可重入”的核心含义是:函数或操作因依赖共享资源(如全局变量、静态数据),在并发或中断场景下被重入时会导致数据错误或逻辑混乱,而非资源被永久锁死导致第二次调用完全无法执行‌。

我之所以会有这样的误解其实是之前看到的一句话:“不可重入函数不能由超过一个任务所共享”,其实这句话强调是的数据危险性而非调用禁止性。
与此相对的,可重入函数要么使用纯局部变量,要么对共享资源做互斥保护。
不可重入函数:printf函数、浮点运算函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值