On Thu, Jan 29, 2015 at 11:27 AM, Andrew Stitcher <[email protected]>
wrote:

> On Thu, 2015-01-29 at 10:05 -0500, Justin Ross wrote:
> > The Proton C code has a lot of redundant includes.  That is, headers
> often
> > directly include items they already have transitively.  This makes some
> of
> > the dependency graphs in our api doc less attractive and less helpful:
> >
> I think this is a problem with the doc generator mostly, not the actual
> header files.
>
> The current best practice in C (and C++) is for a header file (and a
> source file too) to include any header that defines a type that the file
> directly depends on (irrespective of any transitive includes).
>
> This makes the file robust against any change of transitive includes
> because the dependencies of its dependencies change.
>
> So I agree with Alan, we should remove _unnecessary_ includes but not
> ones that are redundant because of transitive includes.
>
> Another point is that you should only need to include a header file for
> a type if you are using details of the type's structure not if you
> merely use a pointer to that type in an API - that can be covered with a
> forward declaration of the type like "typedef struct pn_foo pn_foo;".
>
> In general the C headers should have few reasons to need the details of
> other complex types.
>
> One reason why C headers very often do not follow these rules is that
> people usually just compile source files and generally do not check that
> header files compile on their own.
>

Hmm, should we consider adding this to our build? I know I've fairly
recently fixed a bunch of bugs where I include a file and it breaks because
it's only ever been included along with some other file that supplied
something it needed.

--Rafael

Reply via email to