Nya*_*yan 12 c c99 operator-precedence sequence-points
在阅读序列点后,我了解到这i = ++i是未定义的.
那么这段代码怎么样:
int i;
int *p = &i;
int *q = &i;
*p = ++(*q); // that should also be undefined right?
Run Code Online (Sandbox Code Playgroud)
假设p和q的初始化取决于某些(复杂)条件.他们可能像上面的情况一样指向同一个对象.会发生什么?如果未定义,我们可以使用哪些工具进行检测?
编辑:如果两个指针不应该指向同一个对象,我们可以使用C99限制吗?这是"严格"的意思吗?
Chr*_*odd 12
是的,这是未定义的行为 - 您对对象进行了两次修改,它们之间没有序列点.不幸的是,自动检查是非常困难的 - 我能想到的最好的就是assert(p != q)在此之前添加,这至少会给出一个干净的运行时故障,而不是更糟糕的事情.在一般情况下,在编译时检查它是不可判定的.
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |