1ere facon :
#include <stdio.h>
stdio.h etant un simple exemple...
le nom du fichier est entoure de <> pour les headers des lib presentes sur la machine
2eme facon :
#include "toto.h"
le nom du fichier est entoure de "" pour les headers creer par le developpeur
le header va alors etre cherche dans le repertoire du projet ou alors dans d'autres repertoires s'ils sont repertories dans le Makefile
C'est très simple: avant la compilation il y a le préprocesseur qui travaille:
->les define sont remplacé par leur valeur
->les macros sont étendues
->les include sont remplacé dans le fichier
->...
Donc si tu fais
#include <stdio.h>
stdio.h est collé à la place du include, s'il inclue d'autre fichiers, ils seront eux-même copié
d'où l'intrêt du ifdef au début des headers: s'il est inclu deux fois pas le même fichier, il est copié une fois .