Vinculación de archivos .h con .c con protectores de encabezado #ifdef
Tengo problemas para vincular archivos .h y .c, también he leído algunos subprocesos relacionados con este problema y todos son un poco vagos y todavía no puedo entender el concepto, y tengo muchos problemas de vinculación ,Digamos que tengo b.c y b.h que usaré en a.c, y estoy confundido acerca de si incluir bh tanto ac como bc cuz bc necesita conocer la estructura definida en bh, tengo alguna función que tiene su prototipo en bh y está definida en bc que también usa la estructura en bh, no lo estoy incluir bh en bc cuz como lo que sé bh es más como una interfaz a ac que usará las funciones en bc ... Aquí hay un ejemplo más claro
archivo b.h
typedef struct{
int x, y;
}myStruct;
void funct1(myStruct);
void funct2(myStruct);
archivo b.c
void funct1(myStruct x)
{
//do something
}
void funct2(myStruct y)
{
//do something
}
archivo a.c
#include "b.h"
int main()
{
myStruct x;
funct1(x);
funct2(y);
return 0;
}
Ejecutado el comando en cygwin:gcc b.c a.c -g
Ahora, la parte confusa, tengo un error de enlace en el que cuando se compila b.c no puede detectar la estructura y los prototipos en b.h. Porque todo lo que sé es que b.h se usa para enlazar b.c desde a.c pero cuando se compila ambos .c parece que b.c no puede encontrar su estructura y prototipos,
¿Por qué no incluí b.h en b.c? Responder: Cuz como lo que sé, bh ya está incluido en ac y cuando lo incluya nuevamente en bc, estaré haciendo inclusiones dobles <--- eso es lo que aprendí hasta ahora y sé que hay #ifdef pero parece que no funcionará, tal vez todavía no sepa cómo usarlo, si lo sabe, no dude en discutir esto.
Si tiene alguna idea de cómo hacerlo, no dude en contarme algo.
hay una directiva #ifdef pero parece que no puedo saber cómo hacer esto.
NOTA: ASUMA QUE TODOS LOS CÓDIGOS ANTERIORES SON SINTÁTICAMENTE CORRECTOS si hay alguna palabra mal escrita, por favor ignore, estoy solo después de las inclusiones entre .h y .c