61 votes

Comment puis-je créer des fichiers d'en-tête C

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.

135voto

Pablo Santa Cruz Points 73944
  1. Ouvrez votre éditeur de texte préféré
  2. Créez un nouveau fichier nommé whatever.h
  3. 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
$

3voto

Bryan Ash Points 2214

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.

-1voto

stratz Points 35

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X