Назначение прототипов функций - PullRequest
0 голосов
/ 18 февраля 2020

Из упражнения в классе:

Fill in the blanks to print
"it works!" on the screen,
type in the function
prototype before its call.
void some_func();
int main()
{
    some_func();
    return 0;
}
void some_func() {
    cout << "it works!" << endl;
}

Если я использую функцию сразу после того, как объявил ее, почему этот код определил ее в конце? Я имею в виду, мы могли бы просто объявить и определить, а затем вызвать в основном. У меня нет смысла декларировать, звонить, а потом определять.

Я только начал изучать функции. Я новичок.

РЕДАКТИРОВАТЬ с точки зрения C .S. учитель : Этот ученик задается вопросом о цели прототипов функций вообще. Это типичный случай обучения концепции на примере, который достаточно прост для освоения, но настолько прост, что еще не служит цели. Возможно, это еще не правильный вопрос для StackOverflow, но по крайней мере его следует закрыть по правильной причине. Это очень распространенный и четко определенный вопрос.

1 Ответ

2 голосов
/ 18 февраля 2020

В большинстве случаев совершенно нормально поставить определение перед использованием. Единственный раз, когда язык C требует, чтобы вы поместили объявление без определения перед использованием, это когда две или более функции используют друг друга, поэтому одна или несколько из них должны быть объявлены, прежде чем другие могут быть определены. Я предпочитаю собирать модуль из меньших / меньших частей в большие, поэтому я обычно ставлю определения функций перед подпрограммами, которые их используют. Однако учитель может представлять это упражнение, чтобы научить понятиям деклараций, а не учить вас использовать определенный стиль.

Если вы еще не узнали о них, вы скоро узнаете о header файла. По мере усложнения программ мы больше не хотим хранить весь исходный код в одном файле по нескольким причинам. (Управлять большим количеством кода становится все труднее. Группирование функций по типу предоставляемых ими услуг или по типу общих данных, с которыми они работают, может помочь нам организовать исходный код и сделать его более понятным для человеческого понимания. Это также облегчает повторно использовать функции в других программах.) Как только мы разбиваем программу на отдельные исходные файлы, некоторые определения больше не будут находиться в том же исходном файле, что и рутина для их использования. Поэтому вместо определений мы помещаем объявления в исходные файлы по мере необходимости. Процедура foo, определенная в одном исходном файле, и другие файлы, которые ее используют, будут иметь объявления foo.

. Это вызывает проблему, заключающуюся в том, что объявления затем повторяются во многих местах. Это становится бременем для поддержания - каждый раз, когда меняется определение foo, все его декларации должны быть изменены. И легко допустить ошибки, которые могут привести к ошибкам в программе, потому что объявление функции, отличной от того, как она определена, может вызвать нежелательное поведение. Чтобы справиться с этим, объявления для одного набора вещей, как правило, все те, которые определены в одном исходном файле (и предназначены для использования другими исходными файлами), собираются в один файл, называемый заголовочным файлом, и обычно ему присваивается имя, оканчивающееся на .h. Затем другие исходные файлы просто включают заголовочные файлы, которые содержат необходимые объявления, используя директиву #include, которая указывает компилятору включать содержимое заголовочного файла в текущую компиляцию, как если бы он был частью текущего исходного файла.

Из-за этого вы должны узнать о различных способах использования объявлений, включая размещение их перед функциями, которые используют объявленные функции.

(Я бы включил C ++, но его объявления могут быть более сложными. )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...