*(易失性无符号整数 *) 的含义 0x00 = 0x00;

Meaning of *(volatile unsigned int *) 0x00 = 0x00;

本文关键字:0x00 易失性 无符号整数      更新时间:2023-10-16

以下代码行的含义是什么?

*(volatile unsigned int *) 0x00 = 0x00;

它用于断言定义:

void Assert()
{
    // (some other code above)
    *(volatile unsigned int *) 0x00 = 0x00;
    return;
}
我可以

猜到它试图导致程序因分段错误或类似错误而崩溃。

编写代码的人都在想"我希望编译器不会优化这个崩溃,所以让我们在指针取消引用前面放一个易失性"。

但是代码所做的只是导致无法保证崩溃的未定义行为。

如果您希望

程序终止,那么std::terminate()是一个更好的选择,那么 UB Assert()

另请注意,应该为断言提供一个条件,然后如果条件为 false,断言应该触发一些失败代码。 Ot 并不意味着是"退出此程序"功能。查看链接的评论

将0x00转换为指向volatile unsigned int的指针,然后使用运算符 * 取消引用它并写入该地址0x00。这是未定义的行为,在大多数系统上会导致崩溃。