fonction extern déclaré dans les .h [C] - C++ - Programmation
Marsh Posté le 26-04-2002 à 22:35:28
Je ne comprends pas la question...
Si tu déclares une fonction que tu décris plus loin, tu ne mets pas de extern.
Mais si la fonction est contenue dans un autre fichier, que ce soit un autre module de ton programme ou une bibliothèque, elle est déclarée avec extern (donc un .h ne doit contenir que des extern).
Marsh Posté le 26-04-2002 à 22:56:12
En C, pour une fonction, extern signifie que la fonction a une scope global. Cela s'oppose a static qui precise que la fonction a un scope limité au fichier ou elle est declaree.
Par defaut, toute fonction est extern.
Donc
extern mytype 1myproto(mytype2 myvar);
et
mytype1 myproto(mytype2 myvar);
sont entierement equivalent et s'opposent a
static mytype1 myproto(mytype2 myvar);
Dans la pratique, on ecrit parfois explicitement extern pour clairement indiquer dans un module que la fonction est definie dans un autre:
Un style que j'ai vu utilise dans des boites etait:
/******** extern protos *************/
extern int f1();
.........
extern int fk();
/******** public protos **************/
int g1();
.......
int gk();
/******** local protos ****************/
static int h1();
.......
static int hk();
On regroupe avec cette technique les protos de
fonctions globales declarées ailleurs et utilisees dans le fichier.
fonctions globales definies dans le fichier;
fonctions locales definies dans le fichier.
Je recommande pas cette technique:
Une technique superieure est:
* regrouper les globales definies dans le fichier dans un header (fichier.h)
* inclure les headers de ce types pour les fonctions publiques utilisees par le fichier
* garder la partie statique en tete de son fichier.
Ce genre de chose peut s'automatiser assez facilement.
J'ai vu des variantes:
* regrouper les globales definies dans les fichiers du repertoire et utilisees par du code d'autre repertoires dans un header (glob_dir.h)
* regrouper les globales definies dans les fichiers du repertoire et utilisees par du code d'autre fichiers du meme repertoire dans un header (loc_dir.h)
* inclure les headers glob_otherdir.h pour les fonctions publiques utilisees par le fichier.
* inclure le header loc_dir.h.
* garder la partie statique en tete de son fichier.
Ce genre de chose peut s'automatiser assez facilement.
A+,
Marsh Posté le 26-04-2002 à 23:44:25
gilou a écrit a écrit : En C, pour une fonction, extern signifie que la fonction a une scope global. Cela s'oppose a static qui precise que la fonction a un scope limité au fichier ou elle est declaree. Par defaut, toute fonction est extern. Donc extern mytype 1myproto(mytype2 myvar); et mytype1 myproto(mytype2 myvar); sont entierement equivalent et s'opposent a static mytype1 myproto(mytype2 myvar); Dans la pratique, on ecrit parfois explicitement extern pour clairement indiquer dans un module que la fonction est definie dans un autre: Un style que j'ai vu utilise dans des boites etait: /******** extern protos *************/ extern int f1(); ......... extern int fk(); /******** public protos **************/ int g1(); ....... int gk(); /******** local protos ****************/ static int h1(); ....... static int hk(); On regroupe avec cette technique les protos de fonctions globales declarées ailleurs et utilisees dans le fichier. fonctions globales definies dans le fichier; fonctions locales definies dans le fichier. Je recommande pas cette technique: Une technique superieure est: * regrouper les globales definies dans le fichier dans un header (fichier.h) * inclure les headers de ce types pour les fonctions publiques utilisees par le fichier * garder la partie statique en tete de son fichier. Ce genre de chose peut s'automatiser assez facilement. J'ai vu des variantes: * regrouper les globales definies dans les fichiers du repertoire et utilisees par du code d'autre repertoires dans un header (glob_dir.h) * regrouper les globales definies dans les fichiers du repertoire et utilisees par du code d'autre fichiers du meme repertoire dans un header (loc_dir.h) * inclure les headers glob_otherdir.h pour les fonctions publiques utilisees par le fichier. * inclure le header loc_dir.h. * garder la partie statique en tete de son fichier. Ce genre de chose peut s'automatiser assez facilement. A+, |
, voilà moi la méthode dont je parlé été 'loc_dir.h' .Le mot clé extern est donc implicite, avec ou sans c'est une question de goût
Marsh Posté le 26-04-2002 à 21:17:35
je n'arrive pas à comprendre l'utlité du mot clé extern dans les définitions de fonctions (contenu dans un point h)des progs C.
je sais que le mot clé extern sert au compilateur pour lui indiquer que l'attribut déclaré en extern est défini dans un autre fichier (je l'utilise en C++).
Mais pour les fonctions en C qu'elle soit déclarée en tant qu'extern ou pas, étant donné que l'on fait un include du .h cela revient au même.
Si quelqu'un connaît la réponse...