web-dev-qa-db-fra.com

Comment 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 l'un de mes programmes C.

61
user340838
  1. Ouvrez votre éditeur de texte préféré
  2. Créer un nouveau fichier nommé any.h
  3. Mettez vos prototypes de fonction dedans

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
$
135
Pablo Santa Cruz

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.

3
Bryan Ash