In c99, my understanding is that comparing two pointers which do not point within the same aggregate results in undefined behavior. Given an aggregate A, a pointer p_good which is known to point within A, and a pointer p_unknown which may or may not point within A, is it possible to construct a portable test with defined behavior which determines whether it is safe to compare p_good and p_unknown?
Obviously, this test cannot itself fall afoul of the restrictions on comparing pointers.
I suspect that the answer is 'no', but I'd be happy to be shown otherwise.
You commented:
Another way to frame the question would be like this: Given the definition of an aggregate 'A' and a pointer p, is it possible to answer the question 'does p point within A' without violating the rule on inequality testing of pointers to different aggregates
The only way I can interpret this meaningfully is that you either have an object of type Aggregate type
or a pointer to one. Then the answer is simple:
Pseudo-code:
bool p_in_A = false;
for (each element in Aggregate A)
if (&element == p)
p_in_A = true;
There is no way to tell whether a stray pointer belongs to an unknown aggregate object (or points to "between" elements in an aggregate).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With