Je veux être capable de créer une collection de fonctions dans un fichier d'en-tête que je pourrais # inclure dans un de mes programmes C.Comment puis-je créer des fichiers d'en-tête C
Répondre
- Ouvrez votre éditeur de texte favori
- Créer un nouveau fichier nommé whatever.h
- Mettez vos prototypes de fonction en elle
FAIT.
Exemple whatever.h
#ifndef WHATEVER_H_INCLUDED
#define WHATEVER_H_INCLUDED
int f(int a);
#endif
Note: les inclusions (commandes de 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 d'être supporté par tous les compilateurs.
Exemple whatever.c
#include "whatever.h"
int f(int a) { return a + 1; }
Et vous pouvez inclure « whatever.h » dans tout autre fichier .c, et le lien avec le fichier objet de whatever.c.
Comme ceci:
sample.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 pour créer un fichier exécutable:
$ gcc sample.o whatever.o -o sample
Vous pouvez tester exemple:
$ ./sample
3
$
vous pourriez vouloir mentionner les protecteurs d'en-tête – luke
@luke: Merci beaucoup. Je n'ai aucune idée de ce que sont les gardes d'en-tête. Aller à google maintenant. Merci encore. –
@luke: oh! Je vois. Bon point. Va les ajouter. –
Les fichiers d'en-tête peuvent contenir n'importe quel 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 fichiers .c
, chaque fichier .c
recevra 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 des fonctions static
dans un fichier d'en-tête pour les inclure dans plusieurs fichiers .c
. Bien que cela ne soit généralement pas fait parce qu'il rompt avec la convention que le code est trouvé dans les fichiers .c
et les déclarations se trouvent dans les fichiers .h
.
Voir les discussions au C/C++: Static function in header file, what does it mean? pour plus d'explications.
avec un éditeur de texte? – stefanB
Si je suis correctement, ce que vous voulez est de créer une bibliothèque, semblable aux bibliothèques C standard de sorte que vous incluez un fichier d'en-tête avec des définitions de fonction, puis un lien avec cette bibliothèque lors de la construction de votre exécutable final. Est-ce correct? –
Oui, vous avez raison. – user340838