Supongamos que hay un archivo de encabezado: ah y un archivo fuente: a1.c a2.c … an.c; n> = 1, lo que significa que solo puede tener un archivo de origen o varios archivos de origen.
mi pregunta es cómo definir una variable global g en ah; que debería ser visible por a1.c … an.c.
hay restricciones
en a1.c a2.c … an.c; “ah” solo puede incluirse en la primera línea, lo que significa que no debe haber código en el archivo fuente antes de la línea de #include “ah”
g debe definirse en el ah
Solo se puede comstackr el código de la siguiente manera:
gcc -c a1.c -o a1.o ... gcc -c an.c -o an.o gcc -o a.exe a1.o ... an.o
hay una respuesta que define g en ah así: extern int g; sin embargo, según la especificación J.5.11 de la c; Es un comportamiento indefinido.
¿hay alguna otra solucion?
Como dijo, la variable debe definirse en el archivo c y la statement debe ubicarse en el archivo de encabezado.
Debe definir una variable global en cualquier archivo c y declarar ‘extern’ en el archivo de encabezado.
Ejemplo)
1) define global variable in a1.c int g; 2) declare global variable in ah extern int g; 3) include header file in other c files #include "ah" // to do something