Diferencia entre extern int a; extern int a = 42;

Mientras estaba leyendo las respuestas de Uso de la palabra clave ‘extern’ mientras definía la variable

Uno de los usuarios respondió de esta manera.

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

Esperaba que ambas no sean definiciones sino declaraciones. Estaba pensando que ambas afirmaciones dicen que la variable está definida fuera de la función y tenemos que usar una palabra clave externa para usarla. ¿Es esto un error de él o es realmente una definición? Yo sé eso

 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 estas declaraciones

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

Por favor, aclararme con estos.

Cada vez que se intenta la inicialización, la statement se convierte en una definición , independientemente de que se use extern . La palabra clave extern es redundante en tal caso porque, de forma predeterminada, los símbolos no marcados como static ya tienen enlaces externos.

No tiene sentido declarar una variable externa y establecer su valor inicial en la unidad de comstackción actual, eso es una contradicción.

extern int a; es una declaracion No asigna espacio para almacenar un archivo.

extern int a = 42; es una definicion Asigna espacio para almacenar el valor int a y le asigna el valor 42.

aquí las variables se declaran dentro de la función main () donde su definición se definió afuera en la sección de statement global

 extern int a; //This is a declaration extern int a=42; //This is a definition