Je veux pouvoir créer une collection de fonctions dans un fichier d'en-tête que je pourrais #inclure dans un de mes programmes C.
Réponses
Trop de publicités?- Ouvrez votre éditeur de texte préféré
- Créez un nouveau fichier nommé whatever.h
- Mettez-y vos prototypes de fonction
FAIT.
Exemple whatever.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Note : les gardes d'inclusion (commandes du préprocesseur) ont été ajoutées grâce à luke. Elles é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 les commandes #pragma once
mais il n'est pas garanti qu'il soit supporté par tous les compilateurs.
Exemple whatever.c
#include "whatever.h"
int f(int a) { return a + 1; }
Ensuite, vous pouvez inclure "whatever.h" dans n'importe quel autre fichier .c, et le lier avec le fichier objet de whatever.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 un échantillon :
$ ./sample
3
$
Les fichiers d'en-tête peuvent contenir tout code C valide, puisqu'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 qu'il est inclus par de multiples .c
fichiers, chaque .c
obtiendra une copie de cette fonction et créera un symbole pour elle. L'éditeur de liens se plaindra des symboles dupliqués.
Il est techniquement possible de créer static
dans un fichier d'en-tête pour l'inclure dans de multiples .c
fichiers. Bien que cela ne soit généralement pas fait car cela rompt avec la convention selon laquelle le code se trouve dans les fichiers .c
et les déclarations se trouvent dans .h
des fichiers.
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.
Gardez à l'esprit que vous pouvez également placer le fichier d'en-tête dans un autre directeur, à condition d'indiquer le chemin d'accès dans l'instruction include. Veillez simplement à ce que le chemin soit relatif et non absolu. De cette façon, votre code reste portable.
Par exemple :
#include "../my_headers_directory/whatever.h"
indique au programme d'inclure n'importe quel fichier .h qui se trouve dans le répertoire parent de my_headers_director.