You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

相同C代码在Mac与Linux输出不同:Mac上const变量修改未生效原因

问题分析:Mac与Linux平台const变量修改结果差异

首先明确:你的代码存在未定义行为——C标准明确禁止将const限定变量的地址赋值给非const指针并修改其内容,这种情况下编译器和平台可以做出任何符合自身实现的行为,没有统一预期。

造成Mac和Linux结果不同的核心原因是编译器优化策略的差异:

  • Mac平台(实际使用Clang编译器,即使调用gcc也是其别名):
    Clang默认会对const类型变量执行常量折叠优化——编译阶段就把代码中所有引用test的地方直接替换成字面量10,完全跳过运行时从内存读取变量的步骤。哪怕你通过指针强行修改了内存中test对应的存储值,printf输出的依然是编译时就确定的10。

  • Linux平台(使用GCC编译器):
    GCC默认优化等级下,没有对该const变量执行常量折叠,或者将其放在了可读写的内存区域。程序运行时,printf会从内存中读取test的值,而你通过指针修改了这块内存的内容,所以第二次printf输出修改后的1。

额外提醒:永远不要依赖未定义行为的运行结果,编写符合C标准的代码才是可靠的做法。

内容的提问来源于stack exchange,提问作者Lukasz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:06:02