Łączenie plików .h z .c za pomocą strażników nagłówka #ifdef

Mam problemy z łączeniem plików .h i .c, przeczytałem też kilka wątków dotyczących tego problemu, a wszystkie z nich są nieco niejasne i wciąż nie mogę w pełni zrozumieć pojęcia tego i mam wiele problemów z łączeniem ,Powiedzmy, że mam b.c i b.h, którego użyję w a.c, i jestem zdezorientowany, czy dołączyć bh zarówno ac, jak i bc cuz bc sam musi znać strukturę zdefiniowaną w bh, mam jakąś funkcję, która ma swój prototyp w bh i jest zdefiniowana w bc, która również używa struktury w bh, nie jestem w tym bh w bc cuz, ponieważ to, co wiem, bh jest bardziej jak interfejs do ac, który będzie korzystał z funkcji w bc .. Oto wyraźniejszy przykład

plik b.h

typedef struct{
int x, y;
}myStruct;

void funct1(myStruct);
void funct2(myStruct);

plik b.c.

void funct1(myStruct x)
{
    //do something
}

void funct2(myStruct y)
{
     //do something
} 

plik a.c.

#include "b.h"

int main()
{
myStruct x;
  funct1(x);
  funct2(y);
return 0;
}

Wykonano polecenie w cygwin:gcc b.c a.c -g

Teraz myląca część, mam błąd łączenia, w którym gdy b.c jest skompilowany, nie może wykryć struktury i prototypów w b.h. Bo wszystko, co wiem, to to, że b.h jest używane do łączenia b.c z a.c, ale gdy oba .c są kompilowane, wydaje się, że b.c nie może znaleźć swojej struktury i prototypów,

Dlaczego nie umieściłem b.h w b.c? Odpowiedź: Ponieważ to, co wiem, bh jest już uwzględnione w ac i kiedy włączę je ponownie w bc, będę robił podwójne inkluzje <--- to czego się uczę do tej pory i wiem, że jest #ifdef, ale wydaje się, że nie będzie działać, może nadal nie wiem, jak z niego korzystać, jeśli wiesz, możesz to omówić.

Jeśli masz jakiś pomysł, jak się do tego zabrać, możesz mi powiedzieć.

istnieje dyrektywa #ifdef, ale nie mam pojęcia, jak to zrobić.

UWAGA: PRZYJMUJ SIĘ, ŻE WSZYSTKIE POWYŻSZE KODY SĄ SKUTECZNIE POPRAWIONE, jeśli są jakieś błędnie napisane słowa, proszę zignorować, jestem tylko po włączeniach między .h i .c

questionAnswers(4)

yourAnswerToTheQuestion