Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] fonction extern déclaré dans les .h

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] fonction extern déclaré dans les .h

n°131517
weblook$
happy face
Posté le 26-04-2002 à 21:17:35  profilanswer
 

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... :jap:

mood
Publicité
Posté le 26-04-2002 à 21:17:35  profilanswer
 

n°131533
Jar Jar
Intaigriste
Posté le 26-04-2002 à 22:35:28  profilanswer
 

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).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°131541
gilou
Modérateur
Modzilla
Posté le 26-04-2002 à 22:56:12  profilanswer
 

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°131557
weblook$
happy face
Posté le 26-04-2002 à 23:44:25  profilanswer
 

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+,  




 
 
 :jap:  :jap: , 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   :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] fonction extern déclaré dans les .h

 

Sujets relatifs
[C] comment on fé une fonction ki renvoie une chaine de caracteres ?PhP, fonction header
pb pour sortir d'une fonction Javascript!!fonction fseek en C
[C ] accès d'une fonction par deux thread[PHP] Fonction Download
[PHP] Fonction close() déjà définie ?[PHP] Problème de session dans une fonction ...
l'equivalent de la fonction "eval" du javascript existe t'il en java ?acceder à une base mysql a partir d'une fonction javascript
Plus de sujets relatifs à : [C] fonction extern déclaré dans les .h


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR