Если у вас есть объявление b()
в main.h
, зачем вам оно снова нужно в other.c
, которое включает его? Кроме этого, все хорошо, не вижу никаких проблем.
Важно помнить о «нормальных» функциях, что все прямые объявления одной и той же функции (в данном случае b()
) должны совпадать, иначе у вас будут проблемы (связывание ошибок, ошибки компилятора, что нет). В вашем случае они не совпадают.
Если, конечно, b();
не является фактическим вызовом функции, но, по крайней мере, в коде, который вы разместили, он выходит за пределы области видимости, поэтому рассматривается как прямое объявление.
Относительно static
предварительных объявлений, они ограничивают видимость функции модулем компиляции. Таким образом, вызов a()
в other.c
не выполнит a()
, реализованный в main.c
. Вот и весь смысл static
в C.