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;
}
5 Réponses :
Etant donné que mais si la définition 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.
code> était
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.
myglobalvar code> 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 code> 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. P>
Le mot clé (bien sûr, normalement que la bibliothèque déclarerait les variables extern code> signifie "Le stockage de cette variable est alloué ailleurs". Il raconte le compilateur "Je référencée
myglobalvar code> 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 em> connaît
myglobalvar code> - il est défini précédemment dans la même unité de traduction (
.c code> ou
.cc code> fichier.) Vous utilisez normalement
extern code> lorsque vous souhaitez vous référer à quelque chose qui est pas em> dans l'unité de traduction actuelle, telle qu'un variable qui est définie dans une bibliothèque que vous allez relier. P>
extern code> pour vous, dans un fichier d'en-tête à inclure.) p>
de ici : p>
Une variable globale en C / C ++ est une variable accessible de tout module de votre programme. P>
int myglobalvariable; p>
Ceci attribue le stockage pour les données et indique au compilateur que vous souhaitez accéder à ce stockage avec le nom 'myglObalVariable'. p>
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: p>
externe int myglobalvariable; p>
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". p>
En bref: Par exemple: p> my_file.cpp strud> p> Vous pouvez accéder à la variable globale dans le même fichier. Pas besoin d'utiliser 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 donc, avec my_file.cpp strong> déclarant le autre_file.cpp strong> p> 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>.
extern code>: p>
extern code>. P>
global_var , dans autre_file.cpp strud> si vous essayez ceci: 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'
}
Grande explication
Il n'y a pas de différence comportementale, sauf pour éventuellement sur la visibilité du nom de la variable.