Связывание файлов .h с .c с помощью защиты заголовков #ifdef

У меня проблемы с связью файлов .h и .c, яЯ также читал некоторые темы, касающиеся этой проблемы, и все они немного расплывчаты, и все же я могу 'Я полностью понимаю концепцию этого, и у меня много проблем со связыванием,Скажем, у меня есть b.c и b.h, которые я буду использовать в a.cи я запутался, нужно ли включать bh как ac, так и bc, потому что сама bc должна знать структуру, определенную в bh, у меня есть некоторая функция, которая имеет свой прототип в bh и определена в bc, которая также использует структуру в bh, я не включая bh в bc, потому что я знаю, что bh больше похож на интерфейс для ac, который будет использовать функции в bc. Вот более понятный пример

б.ч файл

typedef struct{
int x, y;
}myStruct;

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

файл b.c

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

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

файл .c

#include "b.h"

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

Выполнил команду в cygwin:gcc b.c a.c -g

Теперь запутанная часть, у меня есть ошибка компоновки, в которой когда компилируется b.c, он может 'Обнаружить структуру и прототипы в ч.ч. Потому что все, что я знаю, это то, что b.h используется для связи b.c с a.c, но когда оба .c скомпилированы, кажется, что b.c может 'найти его структуру и прототипы,

Почему нея включаю ч.ч. в б.ч? ОтветПотому что, как я знаю, b.h уже включен в a.c, и когда я снова включаю его в b.c, ябуду делать двойные включения <--- это то, что я узнал до сих пор, и я знаю, что есть #ifdef, но, кажется, он победилне работает, может быть, я до сих пор неНе знаю, как его использовать, если вы знаете, пожалуйста, не стесняйтесь обсуждать это.

Если у вас есть идеи о том, как это сделать, не стесняйтесь рассказать мне немного.

есть директива #ifdef, но я могуКажется, я не знаю, как это сделать.

ПРИМЕЧАНИЕ: предположите, что все вышеперечисленные коды являются синтаксически правильными, если есть какие-либо слова с ошибками, пожалуйста, не обращайте внимания, ям только после включений между .h и .c

Ответы на вопрос(4)

Ваш ответ на вопрос