acm*_*acm 5 c pointers c99 undefined-behavior
在c99中,我的理解是比较两个不指向同一聚合的指针会导致未定义的行为.给定聚合A,已知指向A内的指针p_good和可能指向或不指向A内的指针p_unknown,是否可以构造具有定义行为的可移植测试,该行为确定比较p_good和p_good是否安全. p_unknown?
显然,这个测试本身不能违反比较指针的限制.
我怀疑答案是'不',但我很乐意以其他方式表现出来.
你评论说:
构建问题的另一种方法是这样的:给定聚合'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)
无法判断杂散指针是否属于未知聚合对象(或指向聚合中的"之间"元素).