Почему не используется заголовочный файл?
Это не имеет большого значения, заголовочные файлы в любом случае являются просто текстовыми. имеет смысл помещать объявления в заголовочные файлы, особенно если они используются в нескольких местах, но это не требуется . Пока каждый модуль компиляции согласен с тем, что означает название, все будет работать нормально.
Зачем объявлять функции в другом исходном файле с разными сигнатурами?
Они не имеют разных подписей; если бы они сделали, была бы проблема. Но объявление в info.c
имеет список параметров no . Это допускается до тех пор, пока «список параметров [в определении] не должен иметь терминатора эллипса, а тип каждого параметра должен быть совместим с типом, который является результатом повышения аргумента по умолчанию» (N1256 6.7 .5.3, которая, вероятно, является неправильной версией спецификации для приложения к Doom, но это не имеет значения). Другими словами, если функция объявляется без подписи, число и типы ее параметров будут определяться исходя из того, как она вызывается. Пока этот вывод правильный , у вас есть действующая программа, которая будет работать правильно. Это просто старомодно, и из-за отсутствия ясности его немного сложнее поддерживать.