В большинстве случаев совершенно нормально поставить определение перед использованием. Единственный раз, когда язык C требует, чтобы вы поместили объявление без определения перед использованием, это когда две или более функции используют друг друга, поэтому одна или несколько из них должны быть объявлены, прежде чем другие могут быть определены. Я предпочитаю собирать модуль из меньших / меньших частей в большие, поэтому я обычно ставлю определения функций перед подпрограммами, которые их используют. Однако учитель может представлять это упражнение, чтобы научить понятиям деклараций, а не учить вас использовать определенный стиль.
Если вы еще не узнали о них, вы скоро узнаете о header файла. По мере усложнения программ мы больше не хотим хранить весь исходный код в одном файле по нескольким причинам. (Управлять большим количеством кода становится все труднее. Группирование функций по типу предоставляемых ими услуг или по типу общих данных, с которыми они работают, может помочь нам организовать исходный код и сделать его более понятным для человеческого понимания. Это также облегчает повторно использовать функции в других программах.) Как только мы разбиваем программу на отдельные исходные файлы, некоторые определения больше не будут находиться в том же исходном файле, что и рутина для их использования. Поэтому вместо определений мы помещаем объявления в исходные файлы по мере необходимости. Процедура foo
, определенная в одном исходном файле, и другие файлы, которые ее используют, будут иметь объявления foo
.
. Это вызывает проблему, заключающуюся в том, что объявления затем повторяются во многих местах. Это становится бременем для поддержания - каждый раз, когда меняется определение foo
, все его декларации должны быть изменены. И легко допустить ошибки, которые могут привести к ошибкам в программе, потому что объявление функции, отличной от того, как она определена, может вызвать нежелательное поведение. Чтобы справиться с этим, объявления для одного набора вещей, как правило, все те, которые определены в одном исходном файле (и предназначены для использования другими исходными файлами), собираются в один файл, называемый заголовочным файлом, и обычно ему присваивается имя, оканчивающееся на .h
. Затем другие исходные файлы просто включают заголовочные файлы, которые содержат необходимые объявления, используя директиву #include
, которая указывает компилятору включать содержимое заголовочного файла в текущую компиляцию, как если бы он был частью текущего исходного файла.
Из-за этого вы должны узнать о различных способах использования объявлений, включая размещение их перед функциями, которые используют объявленные функции.
(Я бы включил C ++, но его объявления могут быть более сложными. )