2011-09-30 16 views
5

mientras estaba leyendo las respuestas de Use of 'extern' keyword while defining the variableDiferencia entre extern int a; extern int a = 42;

Uno de los usuario ha contestado este manera

extern int a;  // not a definition 
extern int a = 42; // definition 

yo esperaba que ambos no son las definiciones, pero las declaraciones. Estaba pensando en que ambas afirmaciones dicen que la variable se define fuera de la función y tenemos que usar la palabra clave extern para usarla. ¿Es esto un error de él o es realmente una definición? Sé que

extern int a; // variable is already defined but its outside the function 
extern int a=42 ; //I guess a variable is assigned a value but not a definition 

pero éstos comunicado

extern int a = 42; // user said its a definition and now i got confused 

Por favor, aclarar con estos.

+0

Las declaraciones que se discuten en las preguntas vinculadas se supone que son declaraciones con ámbito de archivo, no función con ámbito. –

Respuesta

7

Siempre que se intenta la inicialización, la instrucción se convierte en una definición , no importa que se use extern. La palabra clave extern es redundante en tal caso porque, de forma predeterminada, los símbolos que no están marcados como static ya tienen un enlace externo.

No tiene sentido que declare una variable externa y establezca su valor inicial en la unidad de compilación actual, eso es una contradicción.

+0

¡guau! No sabía que c es realmente un lenguaje con milagros encerrados en él – niko

+0

, por lo que quiere decir extern int a = 42; no es más que int a = 42? derecha – niko

+0

bien Tengo algunos pensamientos en mi mente después de verte contestar déjame probarlo en mi compilador y actualizar mi pregunta si tengo algún problema con eso. pero gracias ! – niko

5

extern int a; es una declaración. No asigna espacio para almacenar a.

extern int a = 42; es una definición. Se asigna espacio para almacenar el valor int a y le asigna el valor 42.

0

aquí las variables se declaran dentro de la función main(), donde se define fuera de su definición en la sección de declaración mundial

extern int a; //This is a declaration 

extern int a=42; //This is a definition 
+2

extrema! ¡¡¡sí!!! – UmNyobe