En plus de l'utilisation des gardes d'inclusion, comme indiqué dans la réponse de Mark Tolonen, il n'y a aucun problème avec la déclaration d'une fonction plus d'une fois, tant que les déclarations sont compatibles. C'est parfaitement acceptable:
int foo(int, char *);
int foo(int a, char *p);
extern int foo(int x, char y[]);
En fait, étant donné que chaque définition est également une déclaration, chaque fois que vous "déclarez en avant" une fonction déclarée dans le fichier même, vous déclarez la fonction deux fois.
Ce qui n'est pas correct, c'est de créer de multiples définitions externes d'une fonction; mais les fichiers d'en-tête bien écrits ne devraient pas créer de définitions externes - seulement des déclarations. La (unique) définition des fonctions printf
et scanf
devrait se trouver dans un fichier objet, qui est lié à votre programme lors de sa construction.