# header file at a top

2 messages from 2011-12-17 to 2011-12-18. Participants: Thiago Farina, Jeff King.
Thread: https://gitlist.dev/t/29199

## Thiago Farina, 2011-12-17 21:57

Subject: header file at a top
Message-ID: <CACnwZYdSPPhLyu6Oi3k2aNzYqvmD=xDYWvCEd2ofyJSntqKdJg@mail.gmail.com>
URL: https://gitlist.dev/e/CACnwZYdSPPhLyu6Oi3k2aNzYqvmD%3DxDYWvCEd2ofyJSntqKdJg%40mail.gmail.com

```
Hi folks,

I don't understand why in git the .h file is not included as the first
substantive line of the .c file.

i.e:

foo.c
--------------------------------------------------------------------
#include "foo.h"

/* in alphabetical order */
#include "bar.h"
#include "tiz.h"

Any particular reason we include the corresponding header file at some
random position in the source file?

```

## Jeff King, 2011-12-18 05:43

Subject: Re: header file at a top
Message-ID: <20111218054352.GB4462@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20111218054352.GB4462%40sigill.intra.peff.net
In-Reply-To: <CACnwZYdSPPhLyu6Oi3k2aNzYqvmD=xDYWvCEd2ofyJSntqKdJg@mail.gmail.com>

```
On Sat, Dec 17, 2011 at 07:57:42PM -0200, Thiago Farina wrote:

> I don't understand why in git the .h file is not included as the first
> substantive line of the .c file.
> 
> i.e:
> 
> foo.c
> --------------------------------------------------------------------
> #include "foo.h"
> 
> /* in alphabetical order */
> #include "bar.h"
> #include "tiz.h"
> 
> Any particular reason we include the corresponding header file at some
> random position in the source file?

The first include in any git source file should be either
"git-compat-util.h", or something that includes it (usually "cache.h").
This introduces compatibility wrappers and definitions which may be used
by other headers.

After that, the next one could be "foo.h", and I do tend to like that
style (since it gives a check that foo.h has no surprising header
dependencies). But I think we simply don't bother caring about header
dependencies in git (i.e., we do have recursive includes in some places,
but we don't require them, and in practice the compiler will tell us if
a source file fails to include a depended-upon header).

-Peff

```
