Header contents
The header A.h
for A.c
should only contain the information that is necessary for external code that uses the facilities defined in A.c
. It should not declare static functions; it should not declare static variables; it should not declare internal types (types used only in A.c
). It should ensure that a file can use just #include "A.h"
and then make full use of the facilities published by A.c
. It should be self-contained, idempotent (so you can include it twice without any compilation errors) and minimal. You can simply check that the header is self-contained by writing #include "A.h"
as the first #include
line in A.c
; you can check that it is idempotent by including it twice (but that's better done as a separate test). If it doesn't compile, it is not self-contained. Similarly for B.h
and B.c
.
For more information on headers and standards, see 'Should I use #include
in headers?', which references a NASA coding standard, and 'Linking against a static library', which includes a script chkhdr
that I use for testing self-containment and idempotency.
Linking
Note that main.o
depends on main.c
, A.h
and B.h
, but main.c
itself does not depend on the headers.
When it comes to compilation, you can use:
gcc -o program main.c A.c B.c
If you need other options, add them (most flags at the start; libraries at the end, after the source code). You can also compile each file to object code separately and then link the object files together:
gcc -c main.c
gcc -c A.c
gcc -c B.c
gcc -o program main.o A.o B.o
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…