Pointers to functions should not be
compared using relational operators because the pointers represent
external function labels and not actual addresses.
Dereferencing a pointer that contains an invalid
value results in a trap if the address references protected memory
or if the address is not properly aligned for the object being referenced.
A declaration of a pointer to an undefined structure
tag is allowed, and the tag need not be defined in the source module
unless the pointer is used in an expression.