On Apr 30, 2015, at 18:44 , William Squires <
email@hidden> wrote:
* The compiler then sees that B.h #imports "A.h", but realizes that A.h is already in use, and skips it.
Indeed, but the gotcha is that only the portion of A.h up till #import “B.h” has been processed. (Because this is C, lexical analysis is linear and textual, so it would have been illegal to proceed further in A.h until after B.h has been processed.) Thus, although the author of B.h might have been intending to have all of A.h available at this point, the circularity partially violates the intention. This is presumably what happened to Alex.
One solution is to use forward references rather than circular definitions.
Another is to put the #import “B.h” at the end of A.h instead of earlier. That way, when the rest of A.h gets skipped, nothing important is missed.
The correct choice of solutions depends on what else is being defined in the two header files. There’s no boilerplate solution.