C99:是否可以可移植地确定两个指针是否指向同一聚合体?

acm*_*acm 5 c pointers c99 undefined-behavior

在c99中,我的理解是比较两个不指向同一聚合的指针会导致未定义的行为.给定聚合A,已知指向A内的指针p_good和可能指向或不指向A内的指针p_unknown,是否可以构造具有定义行为的可移植测试,该行为确定比较p_good和p_good是否安全. p_unknown?

显然,这个测试本身不能违反比较指针的限制.

我怀疑答案是'不',但我很乐意以其他方式表现出来.

eq-*_*eq- 5

你评论说:

构建问题的另一种方法是这样的:给定聚合'A'和指针p的定义,是否有可能回答'在p中指向p'的问题而不违反指向不同指针的不等式测试规则聚集

我能够有意义地解释这一点的唯一方法是你有一个类型的对象Aggregate type或一个指针.那么答案很简单:

伪代码:

bool p_in_A = false;
for (each element in Aggregate A)
    if (&element == p)
        p_in_A = true;
Run Code Online (Sandbox Code Playgroud)

无法判断杂散指针是否属于未知聚合对象(或指向聚合中的"之间"元素).