Je serai tenté de te dire "ça dépend l´option du compilateur"
Que ce soit clair, quand tu fais un include, le compilo ne fait que remplacer le code du fichier inclus a la place de l´include (un "remplacer") si tu veux.
Quand tu compiles un .c, il est donc "gonflé" tout de suite par tous les include que tu y mets. Mais ce qui sort de la compilation, c´est un .o (ou .obj) dans lequel il y a TOUTES les fonctions appelées.
Ensuite, lors du link, un link bourrin ne fera finalement presque qu´assembler les .obj, mais il peut y avoir des options dans ton compilo qui permettent au linker d´ommetre les fonctions non appelées, a voir avec ton compilo 
Je pense qu´un compilo spécial pour systemes embarqué doit déja faire cela, supposition...