Je veux pouvoir créer une collection de fonctions dans un fichier d'en-tête que je pourrais #inclure dans l'un de mes programmes C.
TERMINÉ.
Exemple quel que soit.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Remarque: inclure des gardes (commandes du préprocesseur) ajoutés grâce à luke. Ils évitent d'inclure deux fois le même fichier d'en-tête dans la même compilation. Une autre possibilité (également mentionnée dans les commentaires) est d’ajouter #pragma once
mais il n’est pas garanti qu’il soit supporté par tous les compilateurs.
Exemple
#include "whatever.h"
int f(int a) { return a + 1; }
Et ensuite, vous pouvez inclure "quelqu’un.h" dans n’importe quel autre fichier .c et le lier avec le fichier objet de quelqu’un.c.
Comme ça:
échantillon.c
#include "whatever.h"
int main(int argc, char **argv)
{
printf("%d\n", f(2)); /* prints 3 */
return 0;
}
Pour le compiler (si vous utilisez GCC):
$ gcc -c whatever.c -o whatever.o
$ gcc -c sample.c -o sample.o
Pour lier les fichiers afin de créer un fichier exécutable:
$ gcc sample.o whatever.o -o sample
Vous pouvez tester échantillon:
$ ./sample
3
$
Les fichiers d'en-tête peuvent contenir tout code C valide, car ils sont injectés dans l'unité de compilation par le pré-processeur avant la compilation.
Si un fichier d’en-tête contient une fonction et est inclus par plusieurs .c
fichiers, chacun .c
fichier obtiendra une copie de cette fonction et en créera un symbole. L'éditeur de liens se plaindra des symboles en double.
Il est techniquement possible de créer static
fonctions dans un fichier d’en-tête pour les inclure dans plusieurs .c
des dossiers. Bien que cela ne soit généralement pas fait car cela rompt avec la convention selon laquelle le code se trouve dans .c
Les fichiers et déclarations se trouvent dans .h
des dossiers.
Voir les discussions dans C/C++: Fonction statique dans le fichier d'en-tête, qu'est-ce que cela signifie? pour plus d'explications.