国际标准化组织C11的标准规定在哪里比较两个指针(与 < , > , <= , >= )不指向同一数组的是未定义的行为吗?
<
>
<=
>=
好, 6.5.8p5 from C11 draft 非常清楚:
当比较两个指针时,结果取决于所指向对象的地址空间中的相对位置。如果指向对象类型的两个指针都指向同一对象,或者都指向同一数组对象的最后一个元素之后的一个点,则它们比较相等。如果指向的对象是同一聚合对象的成员,则指向稍后声明的结构成员的指针将比指向结构中较早声明的成员的指针大,指向下标值较大的数组元素的指针将比指向结构中较早声明的元素的指针大。下标值较低的AME数组。指向同一联合对象成员的所有指针比较相等。如果表达式p指向数组对象的元素,而表达式q指向同一数组对象的最后一个元素,则指针表达式q+1比p大。 在所有其他情况下,行为都是未定义的。
“另一种情况”是指两个指针指向不同数组的情况。
pointer provenance 希望未来的标准能够解决边缘问题。