Я хотел бы добавить одну очень хорошую практику (как в C, так и в C ++), которую часто оставляют:
foo.c
#include "foo.h" // always the first directive
За заголовками должны следовать любые другие необходимые заголовки, а затем код. Дело в том, что вам почти всегда нужен этот заголовок для этого модуля компиляции, и включение его в качестве первой директивы гарантирует, что заголовок остается самодостаточным (если это не так, будут ошибки). Это особенно верно для публичных заголовков.
Если в какой-то момент вам нужно что-то поставить перед включением этого заголовка (кроме, конечно, комментариев), то, скорее всего, вы делаете что-то не так. Если вы действительно не знаете, что делаете ... что приводит к другому, более важному правилу => комментируйте свои хаки!