6
votes

externe et global en c

Quelqu'un peut-il me dire s'il existe une exigence particulière d'utiliser extern code> ou global code> variables dans un programme C? Je ne vois aucune différence dans un programme comme ci-dessous, si je change de gloabl en externe.

#include <stdio.h>
#include <stdlib.h>
int myGlobalvar = 10;

int main(int argc, char *argv[])
{
  int myFunc(int);
  int i;
  i = 12;
  myGlobalvar = 100;
  printf("Value of myGlobalvar is %d ,  i = %d\n", myGlobalvar, i);
  i = myFunc(10);
  printf("Value of passed value : %d\n",i);
  printf("again Value of myGlobalvar is %d ,  i = %d\n", myGlobalvar, i);
  system("PAUSE");  
  return 0;
}
int myFunc(int i)
{
    i = 20 + 1000;
//extern int myGlobalvar;
myGlobalvar = 20000;
//    printf("Value of passed value : %d",i);
return i;
}


1 commentaires

Il n'y a pas de différence comportementale, sauf pour éventuellement sur la visibilité du nom de la variable.


5 Réponses :


4
votes

Etant donné que myglobalvar code> a été défini code> avant strong> la fonction myfunc code>. Sa déclaration code> à l'intérieur de la fonction est redondante.

mais si la définition code> était après forte> la fonction, nous devons avoir la déclaration code>. p>

int myFunc(int i)
{
    i = 20 + 1000;
    extern int myGlobalvar; // Declaration must now.
    myGlobalvar = 20000;
    printf("Value of passed value : %d",i);
    return i;
}

int myGlobalvar = 10; // Def after the function.


0 commentaires

1
votes

myglobalvar Comme vous avez défini, il s'agit d'une variable globale, visible de tous les endroits de votre programme. Il n'est pas nécessaire de les déclarer extern dans le même fichier .c. Qui est utile pour les autres fichiers .c pour laisser le compilateur savoir que cette variable va être utilisée.


0 commentaires

31
votes

Le mot clé extern signifie "Le stockage de cette variable est alloué ailleurs". Il raconte le compilateur "Je référencée myglobalvar ici, et vous ne l'avez pas vu auparavant, mais ça va; le linker saura de quoi vous parlez." Dans votre exemple spécifique, ce n'est pas particulièrement utile, car le compilateur fait connaît myglobalvar - il est défini précédemment dans la même unité de traduction ( .c ou .cc fichier.) Vous utilisez normalement extern lorsque vous souhaitez vous référer à quelque chose qui est pas dans l'unité de traduction actuelle, telle qu'un variable qui est définie dans une bibliothèque que vous allez relier.

(bien sûr, normalement que la bibliothèque déclarerait les variables extern pour vous, dans un fichier d'en-tête à inclure.)


0 commentaires

13
votes

de ici :

Une variable globale en C / C ++ est une variable accessible de tout module de votre programme.

int myglobalvariable;

Ceci attribue le stockage pour les données et indique au compilateur que vous souhaitez accéder à ce stockage avec le nom 'myglObalVariable'.

Mais que faites-vous si vous souhaitez accéder à cette variable d'un autre module dans le programme? Vous ne pouvez pas utiliser la même déclaration indiquée ci-dessus, car vous aurez alors 2 variables nommées «myglobalvariable», et cela n'est pas autorisé. Donc, la solution consiste à laisser vos autres modules déclarer la variable sans la définir:

externe int myglobalvariable;

Ceci indique au compilateur "Il y a une variable définie dans un autre module appelé myglObalVariable, de type Enterger. Je veux que vous acceptiez mes tentatives d'y accéder, mais n'acceptez pas de stockage pour cela, car un autre module a déjà fait cela".


0 commentaires

3
votes

En bref: Global code> Les variables sont déclarées dans un fichier. Mais ils sont accessibles dans un autre fichier uniquement avec le mot extern code> avant (dans cet autre fichier). Dans le même fichier, aucun besoin de extern code>.

Par exemple: p>

my_file.cpp strud> p> xxx Pré>

Vous pouvez accéder à la variable globale dans le même fichier. Pas besoin d'utiliser extern code>: p>

my_file.cpp strong> p> xxx pré>

variable globale, par définition , on peut également accéder à tous les autres fichiers. Mais dans ce cas, vous devez accéder à la variable globale à l'aide de extern code>. P>

donc, avec my_file.cpp strong> déclarant le global_var , dans autre_file.cpp strud> si vous essayez ceci: p>

autre_file.cpp strong> p>

int main(){
    extern int global_var;//Note: 'int global_var' without 'extern' would
                          // simply create a separate different variable
    ++global_var;         // and '++global_var' wouldn't work since it'll
                          // complain that the variable was not initiazed.
    std::cout << global_var; // WORKING: it shows '4'
}


1 commentaires

Grande explication