¿Cómo ocurre la inclusión del archivo de encabezado?

Tengo un código C simple con archivos * .c y * .h en el espacio de trabajo.
Tengo un archivo de encabezado 1.h declarando alguna estructura como

struct my1
{ 
int a;
..
..
}my_t;

Pero cuando intento declarar una variable de tipo struct my1 en otro archivo de encabezado 2.h de la siguiente manera: -

struct my1 variable1;

Da error en este punto de declaración.

Parece que my1 no está definido aquí en el archivo 2.h.

En el archivo 1.h necesito incluir 2.h, así que en el archivo 2.h no puedo incluir 1.h, por temor a la inclusión recursiva.

Mi pregunta es:

¿Qué debo declarar para resolver el error de compilación en este caso?

Todo esto me hizo pensar en más preguntas sobre las inclusiones de archivos de encabezado.

Cómo se incluyen los archivos de encabezado, en qué orden, qué archivo de encabezado primero y luego cuál?

¿La inclusión recursiva de archivos de encabezado provocará errores en un archivo que incluye otro y otro que incluye primero?

No podría publicar los fragmentos de código reales por algún motivo de seguridad, así que lo siento si la pregunta plantea algunos problemas de legibilidad.

Respuestas a la pregunta(7)

Su respuesta a la pregunta