LWN:char 是否应该是signed?

【Claude Code · VibeCoding】13|实战演示:水果消消乐 VibeCoding 用「水果消消乐」走一遍 VibeCoding:提示、生成、试玩、改需求、再生成。 阅读详情

关注了就能看到更多这么棒的文章哦~

Would you like signs with those chars?

By Jonathan Corbet
October 24, 2022
DeepL assisted translation
https://lwn.net/Articles/911914/

C 语言之所以让人沉迷的众多原因(怪癖)之一,就是那些它未定义的行为。其中就包括 char 变量是否是有符号的数值(signed quantity)。是或者不是,通常都不会产生什么影响,但也有例外情况。内核代码在许多不同的架构上运行,经常就能找到这些例外情况。最近的一个讨论就是希望能消除 char 变量是否有符号的这个不确定性,但没能更进一步,至少没有朝着它最初尝试的方向。

一般来说,C的整数类型(integer types)是有符号的,除非另有规定;short、int、long 都是这样的。但是 char 在目前的机器上通常是一个单字节变量,它就不太一样;它可以是有符号的,也可以不是,取决于在相应的体系架构上最方便的实现方式。在 x86 系统上,char 变量是有符号的,除非明确声明为 unsigned char。然而在 Arm 系统上,char 变量就是 unsigned(除非明确声明为 signed)。

对于开发者来说,char 变量可能是有符号的,也可能没有,这不是一件很容易记住的事情,特别是当开发者的工作通常都集中在一个特定的架构上的时候。因此,x86 系统的开发者可能会养成习惯,认为 char 总是 signed,结果,写出的代码在其他系统上运行时行为就不对了。Jason Donenfeld 最近遇到了这种错误,在 fix 了之后,他又发布了一个 patch,希望能在内核中整体地解决这个问题。为了试图 "完全消除这种特殊的不一致的 signed 相关的 bug",它在编译器命令行中加入了 -fsigned-char 这个 flag,从而使得直接定义的 char 类型在所有架构上都是 signed 类型的。

这一改动并不受欢迎。Segher Boessenkool 指出,这导致 ABI 发生了变化,并可能损害那些天生希望 char 是 unsigned 的系统中的性能。Linus Torvalds 同意这个观点,他说。"我们应该对这些标准中措辞表示接纳,并意识到 'char' 在这方面是具有不确定性的"。然而,他不同意 Boessenkool 的建议,也就是删除现在在使用的 -Wno-pointer-sign 选项(从而启用-Wpointer-sign 警告)。这个改动将使 signed 和 unsigned char 类型的指针混合使用时报出 warning;Torvalds 抱怨说,当使用 char 变量时,这个机制并不会给出 warning,相反在正确的代码中却产生了大量的 false positive 的 warning。

不过,在讨论的后期,Torvalds 想知道是否真的有必要确定 char 变量是不是 signed,但是反过来,强制它们默认是 unsigned,而不是 signed。他说,这在所有常见的体系架构上都不会让生成的代码变坏。"我确实认为,在各个架构上如果有一些奇怪差异,就通常是个坏主意,能让 C 语言的规则更严格从而避免这些差异是件好事"。有趣的是,他指出,有了这个选项之后,像这样的代码:

const unsigned char *c = "Subscribe to LWN";

仍然会在 -Wpointer-sign 选项下产生一个 warning,因为 string constant pointer 这种字符串常量指针仍然被认为是一个没有指明 signed 与否的 char * 类型,那么对它的处理就跟明确定义了的 unsigned char * 类型是不一样的。"你 真的 无法完全搞定这个情况。这就是个别人控制了的游戏,就像一些怪胎的狂欢游戏"。

Donenfeld 在这个想法中还是看到了一些好处,尽管他认为这确实会破坏一些代码。他给出了一个新的 patch,在编译器命令行中加入了 -funsigned-char,从而实现这个改动。他曾建议,鉴于在 6.1 版本发布前都有时间 fix 它所带来的全部后果,因此也许可以马上先合入掉,但 Torvalds 拒绝了这个想法。"如果我们还在 merge 窗口期间的话,我可能会真的合入,但就目前的情况来看,我认为它应该进入 linux-next,呆在那里为下一个合并窗口做准备。他补充说,这种改动所导致的任何问题都可能是一些很细微的问题,而且是在那些不需要支持各种架构的驱动代码中。核心内核代码其实就不一样,它一直需要能支持跨体系架构都可以很好工作,所以他认为这里不会有问题。

所以 Donenfeld 的 patch 被放在了 linux-next 中,等待 12 月的 6.2 合并窗口。从而社区可以在 2 月底之前来发现那些因为把 char 变量在 Linux 支持的所有架构上都假设成 unsigned 而可能引出的问题。这是一个相当长的时间,但真正开始在尽可能多的环境中测试这一改动也肯定不会太早。毕竟,这是对编写内核的 C 语言的一个根本性的改变;如果没有产生意外,本身就是一个意外了。

要想识别出潜在问题,有一个方法是找到当 char 被强制为 unsigned 时生成的代码会发生变动的地方。Torvalds 已经在这个方向上做了一些努力,Kees Cook 使用了一个用来检查 reproducible builds 而设计的系统,发现了大量的变动。其中许多变动应该都会被证明是无害的,但确定的唯一方法就是真正看一下这些代码。同时,Alexey Dobriyan 发布的一个 fix 引出了 Torvalds 的一个额外要求,就是希望将 char 相关的 fix 都收集到同一个代码 tree 里。随着这些 fix 积累起来,最终结果应该会给人们一个整体印象,来说明这一改动实际上会造成多大的破坏。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

format,png

C# WinForms 多语种切换实现:打造国际化应用程序 合理实现多语种切换功能可以显著提升应用程序的国际化水平。模块化设计:将本地化逻辑模块化,便于管理和维护。异常处理:始终捕获和处理可能的异常,确保程序的健壮性。资源管理:合理管理资源文件,避免重复和遗漏。测试:在不同语言环境下进行全面测试,确保所有字符串都能正确显示。文档和注释:为关键代码添加详细的文档和注释,便于后续维护。 阅读详情

相关推荐

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2873

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 412

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 886

我花3年踩坑总结的C#上位机开发指南:从零基础到项目落地(附实战案例)

串口乱码:编码格式不匹配,一定要和设备端确认;PLC连接超时:检查IP地址和端口,确保上位机和PLC在同一网段;界面卡死:耗时操作没开线程,WinForm用BackgroundWorker,WPF用Task;数据解析错误:寄存器地址算错(Modbus地址从0还是1开始);Modbus数据丢包:加CRC校验,重要数据重发机制;WPF绑定不生效:忘记实现INotifyPropertyChanged;项目打包失败:缺少依赖DLL,用Dependency Walker检查;现场环境不兼容。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1836

全国区块链职业技能大赛国赛考题前端功能开发

全国区块链职业技能大赛国赛考题区块链应用前端功能开发

本郡主是喵 1333

节日小游戏活动快速落地与高效转化技巧

比如,把平时验证过的消消乐、大转盘、接红包等经典玩法作为底子,只需要针对特定的节日(像春节、中秋)或者门店庆典,快速替换一套应景的UI素材和文案,再植入专属的节日福利。这种“旧瓶装新酒”的方式,能把开发周期压缩到极致,确保活动能踩着流量的爆发点准时上线。特别是对于实体门店,游戏通关后的奖励最好能直接引导到线下核销,比如“满100减20”的优惠券,这样能把线上的流量精准地拽进店里,形成实实在在的成交。这种基于熟人关系的推荐,比硬广有效得多,能迅速在朋友圈和社群里铺开,实现低成本的流量获取。

Hxzyxkf2016的博客 181

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构

Sigrity Power SI 3D-EM Full Wave Extraction模式如何进行S参数提取和观测3D电磁场和远场操作指导(一)详细介绍了3D-EM Full Wave Extraction全波S参数提取,下面以一个差分过孔结构进行实例分析,以下图为例。模式如何进行S参数提取和观测3D电磁场和远场实例分析(一)-差分过孔结构。是一个简单的4层板,top换层到bottom层的差分过孔结构。起始频率为100Mhz,截止频率为20Ghz,线性扫描。上面那根曲线是插损,下面那根线是回损。

weixin_54787054的博客 343

Claude Code做Unity项目移植(三): 使用SKILL进行自动化Git提交

本文介绍基于ClaudeCodeSkill的Unity自动化Git提交助手——unity-git-commit,通过四大模块实现提交前的智能检查与安全修复:1)校验Git仓库状态;2)验证Unity项目文件(如排除Library/Temp,确保.meta文件完整);3)依据可配置的C#命名规范自动识别并安全修复命名问题(避免序列化、反射等高危场景误改);4)生成精准提交注释,但强制人工确认。全程仅本地commit,不自动推送或破坏性操作,保障安全。核心思想为“机械化工作交AI,关键决策留人工”,显著提升提交

Aman1984的博客 639

【Dify(v1.x) 核心源码深入解析】File 模块

文件模型(File Model)定义了文件的核心属性,如文件类型、传输方法、相关标识符等,是整个文件处理流程的数据基础。文件解析器(UploadFileParser)负责解析上传的文件,根据配置决定以何种方式(URL 或 Base64)提供图像数据。工具文件解析器(ToolFileParser)专注于工具文件的管理,提供工具文件管理器的获取接口。签名验证与生成(helpers.py)包含文件 URL 签名的生成与验证逻辑,确保文件访问的安全性。文件管理器(file_manager.py)

668

SAP HANA 的一个王炸技能,Smart Data Access

SAP HANA Cloud近期推出Knowledge Graph Engine(KGE),支持RDF三元组存储和SPARQL查询,与向量引擎等组件协同实现混合检索。同时文章介绍了HANA的Smart Data Access(SDA)功能,它通过虚拟表技术实现跨系统联邦查询,支持30+种数据源(不包括PostgreSQL),适用于混合云场景。SDA通过谓词下推优化性能,典型应用包括冷热数据分层和跨系统报表分析。对于PostgreSQL连接需求,建议使用HANA的Smart Data Integration方

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 496

PyBox有什么好用的数织小游戏吗?

我们今天梳理了市面上主流的数织解谜工具,包括在线网站和本地应用,并且重点介绍了 PyBox 中的数织 Nonogram。在线解谜网站**适合快速上手、免费体验,但不适合长时间离线使用。本地解谜工具**提供了离线体验,方便专注解题,但可能会涉及安装和广告问题。PyBox的数织 Nonogram**则在绿色无广告、免安装、完全开源、及DIY定制等方面有着明显优势,非常适合想要一个干净、可控、无干扰的游戏环境的用户。如果你追求极致无干扰、注重隐私、喜欢轻量应用,那么数织 Nonogram 绝对值得一试。

Sanmsung的博客 123

《Linux GPU 驱动核心机制:面向图形与 AI 计算的 DRM 内存管理与任务调度》 目录

本文以缓冲区对象(BO)生命周期为主线,系统解析 Linux DRM 子系统中 GPU 驱动的核心机制。涵盖 GEM 与 TTM 内存管理、dma-buf/dma-fence 共享同步、GPU 调度与地址空间管理,结合 amdgpu、Xe 等驱动代码,深入剖析其设计动机与实现逻辑。旨在填补中文领域对 GPU 内核机制系统性讲解的空白,为图形与 AI 计算场景下的内存泄漏、同步死锁等疑难问题提供可追溯的分析路径。

图形/计算GPU的驱动与虚拟化技术分享园地 3714

Windows远程桌面实现之二十:实现 moonlight 游戏串流协议之(一)

本文介绍在xdisp_virt中集成Moonlight游戏串流协议的实现过程。基于开源项目Sunshine逆向的GameStream协议,作者从零研究并自研实现Moonlight服务端网络通信部分,涵盖mDNS设备发现、nvhttp/nvhttps加密通信、nvrtsp协议交互及三类UDP数据通道(视频、音频、控制)。重点解决多客户端并发问题,采用串行处理机制确保连接一致性。通过自定义证书验证与密钥管理,完成配对与安全通信,最终实现低延迟、高性能的游戏串流体验,显著优于WebRTC浏览器方案。

fanxiushu的专栏 164

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

二进制木马免杀-游戏嵌套与图标替换

二进制木马免杀-游戏嵌套与图标替换

2503_94637398的博客 233

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Unity UGUI布局组件(LayoutGroup、ContentSizeFitter、LayoutElement)详解

UGUI 自动布局是一套的 C# 排版系统,和 Transform 原生锚点完全隔离;整套布局;最终输出只有对 RectTransform 的sizeDelta的赋值。

m0_63330263的博客 258

mark 黑塞《玻璃球游戏》

【最近在读黑塞的《玻璃球游戏》-“ai预言“ - 优快云 App】

2502_94306440的博客 188

Cocos Creator3.8.8 + Xcode27.2 编译运行失败

Cocos Creator3.8构建IOS工程后,使用最新的Xcode27.2版本进行真机调试,遇到C++标准库冲突,如is_floating_point、is_arithmetic和is_signed失败,以及webp对齐失败等问题。

HYNN12的博客 354

Kubernetes 的资源开销、适用边界,以及游戏与有状态负载的工程现实

Kubernetes 不是成本优化工具,而是一把运维规模化的杠杆。它的核心价值在于:当工作负载足够异构、运维复杂度足够高、团队能力足够匹配时,将原本指数级增长的运维成本拉回线性甚至常数级。它通过精细调度回收资源碎片,通过声明式 API 消除手工操作的边际成本,通过生态工具链实现跨环境的一致性。但杠杆的前提是——你得有足够重的负载来撬动。游戏服务端:外围服务放心上 K8s,对局制专用服用 Agones,持久世界要慎之又慎,核心战斗别把容器当虚拟机用。数据库。

神棍之路 264

【Unity基础】Unity输入与Time.deltaTime的使用原则

本文从 mousePositionDelta 与 GetAxis 出发,分析了Time.deltaTime的使用原则

Tealc 361

给 AI 一台贴图工厂:TexGen 程序化贴图引擎与 MCP 架构实践

但它很快就撞墙——一张贴图往往是多层叠加的:底色 + 噪波 + 砖缝 + 暗角 + 高光。所以 TexGen 的核心抽象是图层栈 + JSON 指令表codeTgSpec├── 几何: shape(8 种) + center / size / radius / rotation / cornerRadius├── 绘制: fill(7 种) + color / edgeColor / 渐变 + pattern + warp└── 合成: blend(11 种) + opacity / blur。

邹杭特的博客 330

(开源)游戏攻略分享系统实战指南 基于 Java + SpringBoot + uni-app + Vue + MySQL

这是一个基于 Java + SpringBoot + uni-app + Vue + MySQL 构建的完整游戏攻略分享系统,功能持续优化中...游戏攻略管理 游戏分类管理 旅游资讯管理 用户管理 管理员管理

小小码农身兼魔法师职位!除你武器~ 282

【Unity高级】Unity URP:构建同时支持 2D 与 3D 场景的项目完全指南

本文介绍了如何在Unity项目里同时支持2D和3D场景

Tealc 410

游戏支付通道安全吗?靠谱吗?

资质之外,商家还可以查看通道方的清算背景和合作机构,多方信息交叉验证,判断更准确,正规的通道方经得起多方核实,信息越透明,合作越放心,这是选择安全通道的基本功课,交叉验证后的判断更可靠,正规通道的信息透明,查证过程本身就是信心的来源,合作更踏实,每一步都有依据,核实越细,信心越足。安全配合要落到实处,商家如实上报异常情况,通道方及时处理反馈,双方信息互通,风险才能及时化解,安全不是单方面的承诺,而是双方协作的结果,配合越紧密,保障越到位,双方信息互通,安全网越牢固,风险越小,信息互通有无,风险共同化解。

jingyun_2026的博客 81

老题新解|NOIP 2008 普及组 T3:传球游戏

传球游戏是 NOIP 2008 普及组 T3,核心是「环形边界用取模处理」的二维 DP。本文给出状态定义 + 转移推导 + C++14 代码 + 易错点清单,代码可直接提交主流评测平台。

ZLOJ 313

云游戏边缘节点部署架构与机房选址实践:网络拓扑、GPU选型与延迟优化

云游戏边缘节点部署需系统优化端到端延迟:机房选址应控制光纤距离以压低RTT(<1ms/100km),优先双运营商接入;网络拓扑推荐三层ECMP或EVPN-VXLAN,保障收敛速度与故障隔离;GPU选型依编码需求——T4/L4适配H.264/AV1,A10支持高密度编码。三者协同,方能实现50–80ms延迟目标。

2601_96920793的博客 350

unity3d 程序部署Hololens2的错误

在unity3d中重新发布时重新搞一下,参考下面。

moonlightpeng的博客 36
上一篇: LWN:呼吁再次考虑地址空间隔离!
下一篇: LWN:BPF程序可更灵活地访问内存!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值