Linux 6.2 启用“-funsigned-char”,所有 char 类型设为无符号

来源: 投稿
作者: 罗奇奇
2022-12-08 09:13:00

在下周 Linux 6.2 合并窗口打开之前的早期拉取请求中,有一项更改是默认为 Linux 内核构建启用“-funsigned-char”,这意味着如果没有指定,“-funsigned-char”编译器标志会将所有“char”字符类型设为无符号。

C 的 char 字符数据类型分为 signed char 和 unsigned char,其中 unsigned char 占用内存的所有 8 位并且没有符号位。

灯箱

char 在标准中是 unsigned,但不同的 CPU 体系结构/编译器能将其实现为 signed,也可以实现为 unsigned 。但此更改合并后,对于使用普通“char”类型编写的内核代码, 将普遍将默认 char 类型视为 unsigned 。

WireGuard 首席开发人员 Jason Donenfeld 领导了 Linux 内核的 -funsigned-char 转换工作。早在 Linux 6.1 版本,Jason Donenfeld 在 ARM 上编译驱动程序时触发了构建错误,当时驱动程序假定裸 char 类型有符号,但 ARM 将其视为无符号, C 标准则表示它依赖于体系结构。

发现这个 Char 类型混乱的问题后,他提出了 “treat char as always unsigned” 构建请求。并为 Linux 6.2 发送了一个默认启用 unsigned char 行为的早期 PR ,以及针对内核代码对 char 类型的符号性做出不同假设的各种内核修复。

感兴趣的朋友可以在构建请求早期 PR 邮件中查阅更多详情。

展开阅读全文
点击加入讨论🔥(16) 发布并加入讨论🔥
本篇精彩评论
c语言应该弃用char short long,这种表达,直接内建支持(u)int8,(u)int16,(u)int32,(u)int64
2022-12-09 20:31
2
举报
如果都像写安卓APP的那样,估计咱们用不起电脑了😅
2022-12-09 18:50
1
举报
16 评论
1 收藏
分享
返回顶部
顶部