Soy nuevo en la programación en C, así que estoy intentando muchas cosas diferentes para tratar de familiarizarme con el idioma.inicializando una variable estática en el encabezado
me escribió lo siguiente:
Archivo q7a.h:
static int err_code = 3;
void printErrCode(void);
Archivo q7a.c:
#include <stdio.h>
#include "q7a.h"
void printErrCode(void)
{
printf ("%d\n", err_code);
}
Archivo q7main.c:
#include "q7a.h"
int main(void)
{
err_code = 5;
printErrCode();
return 0;
}
que luego corrió lo siguiente en el archivo MAKE (estoy usando un sistema operativo Linux)
gcc –Wall –c q7a.c –o q7a.o
gcc –Wall –c q7main.c –o q7main.o
gcc q7main.o q7a.o –o q7
la salida es 3.
Por qué sucede esto ?
Si inicializa una variable estática (de hecho cualquier variable) en el archivo de encabezado, entonces si 2 archivos incluyen el mismo archivo de encabezado (en este caso q7.c y q7main.c) el enlazador está destinado a dar un error para definir dos veces la misma var?
¿Y por qué no se inserta el valor 5 en la var estática (después de todo, es estático y global)?
Gracias por la ayuda.
Solo una nota: nunca, en ninguna circunstancia, INICIE las variables en un archivo de encabezado. Es una práctica absolutamente incorrecta. Entiendo que lo estás haciendo ahora como un ejercicio de aprendizaje. –
@ user82238, a menos que sea una constante estática, entonces tal vez. –