¿Cómo definir una variable global visible en varios archivos .c?

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

  1. 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”

  2. g debe definirse en el ah

  3. 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