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
...
Configuration: Linux
Firefox 2.0

3 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    "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
  2. 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
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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