`config.h` is a bit special file. First of all it may contain strange things like `#define inline __inline` (our `config.h` doesn't do it, but `config.h` in MooseFS can), so it's better to include it always, because you never know if you use definitions from this file. The next difference is that this file contains information about which system headers or functions are present, eg. `HAVE_NETDB_H`, `HAVE_WRITEV`, so it has to be included before system headers in order to be able to properly use the system headers, eg:
```
#include "config.h" // get HAVE_NETDB_H and HAVE_WRITEV

#ifdef HAVE_NETDB_H
#  include <netdb.h>
#endif
#ifdef HAVE_WRITEV
#  include <sys/uio.h>
#endif

#include "my_project_file1.h"
#include "my_project_file2.h"
...
```

For these reasons I decided to put `#include "config.h"` as the first line of every file.