Перед вызовом функции вы должны убедиться, что функция объявлена.Хороший способ сделать это - включить заголовочные файлы с объявлениями функций.
Рекомендуется #include foo1.h из foo1.c, чтобы убедиться, что любые объявления в foo1.h соответствуют определениям в foo1.h.
Поскольку у вас есть ужасные взаимозависимости между файлами foo1.c и foo2.c, вам нужно будет как-то включать файлы .h.Это можно сделать с помощью #include из файлов .c, но вы также можете сделать это, включив файлы из .h.Включение из файлов .h может потребоваться, если в файле .h используется какой-либо тип данных, определенный в другом файле .h.
Включать ограждения - это всегда хорошая идея, чтобы вставить ваши файлы .h, чтобы избежать повторного объявленияесли файл .h включен из одного файла более одного раза.
Ваш основной файл должен каким-то образом включать оба файла .h, это можно сделать, включив оба файла из main.c или включив только один файл .hкоторый также включает в себя другой файл .h.