/* * demo_versions/const_via_pointer.c * -------------------------------------------------------------------------- * 演示:通过指针改写 const 变量 —— C 与 C++ 行为差异。 * * 来源:wiki 块 [58954439:21]「3.8 三目运算符/C/C++ const 异同」: * const int a = 10; * int* p = (int*)&a; // 强转去 const * *p = 100; // C:可能改写(UB,但常被编译器接受); * // C++:常量折叠,a 仍可能读出 10(替换式优化) * 两语言下都属未定义行为(UB),但「观察到的值」常不同:C 多见改写生效, * C++ 常因常量折叠仍打印原值。 * * 注:本演示在 -O0 下两者都可能改写;-O2 下 C++ 常量折叠更明显。 * * 运行: * tools/std_probe.py --lang c --file tools/demo_versions/const_via_pointer.c * tools/std_probe.py --lang c++ --file tools/demo_versions/const_via_pointer.c * -------------------------------------------------------------------------- */ #include int main(void) { const int a = 10; int* p = (int*)&a; /* 强转去掉 const(UB:试图改写 const 对象) */ *p = 100; /* 两语言都编译通过;观察 a 的「读出值」差异(依赖优化级别,属 UB) */ printf("a = %d\n", a); return 0; }