问题描述
阅读序列点后,我才知道, I = ++我
是不确定的。
after reading about sequence points, I learned that i = ++i
is undefined.
那么这个怎么样code:
So how about this code:
int i;
int *p = &i;
int *q = &i;
*p = ++(*q); // that should also be undefined right?
比方说,如果p和q的初始化依赖于一些(复杂)条件。
并且它们可以指向同一对象像在上述情况下。
会发生什么?如果它是不确定的,我们可以用什么工具来检测?
Let's say if initialization of p and q depends on some (complicated) condition.And they may be pointing to same object like in above case.What will happen? If it is undefined, what tools can we use to detect?
编辑:如果两个指针不应该指向同一个对象,我们可以使用C99限制?
它是什么严格意味着什么呢?
If two pointers are not supposed to point to same object, can we use C99 restrict?Is it what 'strict' mean?
推荐答案
是的,这是不确定的行为 - 你有一个对象的两处修改他们之间没有一个序列点。不幸的是,检查此自动很难 - (!P = Q)我能想到的是添加断言最好
之前这个权利,这将至少给一个干净的运行时错误而不是更坏的东西。在编译时检查,这是在一般情况下不可判定的。
Yes, this is undefined behavior -- you have two modifications of an object without a sequence point between them. Unfortunately, checking for this automatically is very hard -- the best I can think of is adding assert(p != q)
right before this, which will at least give a clean runtime fault rather than something worse. Checking this at compile time is undecidable in the general case.
这篇关于IS" * P = ++(* Q)QUOT;未定义当p和q指向同一个对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!