Variables externes (c)

echantillon -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,

j'ai un problème avec mes variables externes, des float, petit exemple :

dans un fichier 1:
...
int i = "100";
float f = "1.56"
...


dans un fichier 2:
...
extern i,f;
...
printf ("%d",i);                      // me renvoie 100
printf("%f",f);                       // me renvoie toujours  0,000000
...

3 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
"x" // type const char*

Donc, lorsque tu fait int i="100" je suis même étonner que ça fonctionne.
Tu utilise peut être un vieux compilo, mais normalement les extern doivent être typer.
en C pas classique, mais dans le temps ça passait, une variable non typé était un entier (un peu comme en fortran)
Donc, extern i,f; <=> extern int i,f;
Ensuite, tu lit un float comme un entier, donc ça doit pas lui plaire.
Ce qu'il faut faire :
extern int i;
extern float f;
Le compilateur a besoin de connaitre le type d'une variable, dans ton cas il ne le connait réellement qu'à l'édition des liens. D'où un typage dans chaque fichier (comme pour les fonctions)
1
echantillon
 
"Donc, lorsque tu fait int i="100" je suis même étonner que ça fonctionne. "

oulà donc non !! j'ai écrit trop vite, expéditivement même.

j' écrit ça :

int i = 100;
et non avec des " " .

j'utilise gcc 3.4.6 et ça marche.

Ce que je ne savais pas en fait, c'était qu'il fallait préciser le type quand on fait appel a une variable externe .

avec ça mes float ne déconnent plus ;)

je vais aussi préciser le type de mes int dans la déclaration extern; ca a l'air plus "correct".

merci ;)
1
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je suis étonner que ça compile sans les "int" parceque des fois il y a une erreur et le compilo me dit: "declaration d'int sans type n'est pas du C ansi !"
Pour être le plus propre possible, compile avec l'option -Wall. Là il ne devrai pas laisser passer un non typage sans râler un peu
0