/*
 * 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 <stdio.h>

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;
}
