Wiki dit:Comment définir une variable externe avec une déclaration?
Le moyen mot-clé
extern
"déclare sans définir". En d'autres termes, c'est un moyen de déclarer explicitement une variable, ou de forcer une déclaration sans définition. Il est également possible de définir explicitement une variable, c'est-à-dire de forcer une définition. Cela est fait en affectant une valeur d'initialisation à une variable.
Cela signifie, une déclaration extern
qui initialise la variable sert de définition pour cette variable. Ainsi,
/* Just for testing purpose only */
#include <stdio.h>
extern int y = 0;
int main(){
printf("%d\n", y);
return 0;
}
doit être valide (compiled in C++11). Mais lorsqu'il est compilé avec les options -Wall -Wextra -pedantic -std=c99
dans GCC 4.7.2, produit un avertissement:
[Warning] 'y' initialized and declared 'extern' [enabled by default]
qui ne devrait pas. Autant que je sache,
extern int y = 0;
est effectivement la même que
int i = 0;
Qu'est-ce qui ne va pas ici?
[This] (http://stackoverflow.com/questions/4268589/warning-in-extern-declaration) pourrait également aider. Pas la réponse acceptée, mais celle par [AndreyT] (http://stackoverflow.com/users/187690/andreyt). Notez en particulier la dernière ligne de la réponse: _Désactivez simplement cet avertissement dans les paramètres du compilateur (et, s'il-vous-plaît, écrivez une lettre grossière à ce sujet à l'équipe GCC) ._ – devnull
@devnull; Oui .. – haccks
@devnull; Homme. Tu m'as sauvé. Je jouais avec ça environ une heure! Merci beaucoup :) – haccks