Форум программистов, компьютерный форум CyberForum.ru

Обьявление функций - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.10.2012, 16:24     Обьявление функций #1
Здравствуйте, уважаемые форумчане!
Возник вопрос качательно обьявления функций.
Сейчас читаю книгу Стивена Прата "Язык программирования С++", и там есть такой кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int stonelib(int);
 
int main()
{
   using namespace std;
   int stone,pounds;
   cin>>stone;
   pounds=stonelib(stoun);
}
 
int stonelib(int n)
{
     return 14*n;
}
Зачем в книге перед мейном обьявлена прототип функции, а только после функции написана сама функция.Почему нельзя было сразу перед мейном написать всю функцию и потом её юзать?

Никак понять не могу...
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.10.2012, 16:41     Обьявление функций #2
ZaMaZaN4iK, а Вы прототип удалять пробовали? Ошибки были?
Функция используется за мэйном, без прототипа будет ошибка.
Еще это ценные данные для компилятора, он может проверить функцию, например, на несоответствие типов.
-=ЮрА=-
Заблокирован
Автор FAQ
24.10.2012, 16:52     Обьявление функций #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Зачем в книге перед мейном обьявлена прототип функции, а только после функции написана сама функция.Почему нельзя было сразу перед мейном написать всю функцию и потом её юзать?
Никак понять не могу...
- потому, что когда в проекте 25 функций по 150 строк писать их перед телом main просто глупо(затруднено восприятие проекта и отладка), легче записать заголовки, а уже после основного блока тела функций. Но это ещё пол беды, а вот что действительно существенно - это то что часто одна функция вызывает другую и четвёртую(перекрёсные вызовы), при записи функций перед main их видимость будуь определяться из принципа - чем выше к хедерам тем меньше доступніх функций можем вызвать, при записи же заголовками, напротив любая из функций проекта может быть вызвана в любом теле.
-=ЮрА=-
Заблокирован
Автор FAQ
24.10.2012, 16:58     Обьявление функций #4
Добавлено через 7 минут
BumerangSP, для тебя код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;
 
void fun1();
void fun2();
void fun3();
void fun4();
 
int main()
{
    fun1();
    return 0;
}
 
void fun1()
{
    cout<<"fun1 call"<<endl;
    fun2();
}
 
void fun2()
{
    cout<<"fun2 call"<<endl;
    fun3();
}
 
void fun3()
{
    cout<<"fun3 call"<<endl;
    fun4();
}
 
void fun4()
{
    cout<<"fun4 call"<<endl;
}
Попробуй записать его с телами функций перед main (причём отмечу когда я пишу проект я не хочу думать как мне надо располагать функции относительно друг друга). Прочти о перекрёстных вызовах функций(это самый ключевой момент), прежде чем писать вот такое
Цитата Сообщение от BumerangSP Посмотреть сообщение
ZaMaZaN4iK, а Вы прототип удалять пробовали? Ошибки были?
- они непеременно появятся при перекрёстных вызовах...
Миниатюры
Обьявление функций  
-=ЮрА=-
Заблокирован
Автор FAQ
24.10.2012, 17:04     Обьявление функций #5
ZaMaZaN4iK, основаня суть рассматриваемой тобой записи - избавить программиста от продумывания мест расположения функций и порядка их следования. Не вопрос в твоём преокте отрабоатет с записью и до и после main а вот код выше либо надо продумывать на предмет порядка чередования функций либо использовать именно шаблон
1 объявление функции
2 основной блок
3 прототип функции
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.10.2012, 17:20     Обьявление функций #6
-=ЮрА=-, в том смысле, что если без прототипов расположить функции в таком порядке, причем если вызываемая функция будет описана ниже вызывающей, то будет ошибка? Ну, собственно, я и хотел об этом намекнуть, может и неудачно.
KlimenkoVV
 Аватар для KlimenkoVV
0 / 0 / 0
Регистрация: 24.10.2012
Сообщений: 6
24.10.2012, 17:27     Обьявление функций #7
а в самой книге что? он обычно очень подробно все объясняет. хорошая литература.
-=ЮрА=-
Заблокирован
Автор FAQ
24.10.2012, 21:09     Обьявление функций #8
BumerangSP,
Цитата Сообщение от BumerangSP Посмотреть сообщение
что если без прототипов расположить функции в таком порядке, причем если вызываемая функция будет описана ниже вызывающей, то будет ошибка?
- да будет

Цитата Сообщение от BumerangSP Посмотреть сообщение
Ну, собственно, я и хотел об этом намекнуть, может и неудачно.
- действительно неудачно т.к. я воспринял твои слова с точностью до наоборот
Цитата Сообщение от BumerangSP Посмотреть сообщение
ZaMaZaN4iK, а Вы прототип удалять пробовали? Ошибки были?
, причём последующие свои уточнения ты дописал уже после того как я прочёл эту строку потому я отвечал исходя из начальной сущности твоего ответа.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.10.2012, 22:20     Обьявление функций #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
да будет
Вопрос относился к:
Цитата Сообщение от BumerangSP Посмотреть сообщение
в том смысле, что
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
причём последующие свои уточнения ты дописал уже после того как я прочёл эту строку потому я отвечал исходя из начальной сущности твоего ответа.
Да, но я опять же не спрашивал ТС, почему все это так. Думал, он таки удалит прототип и увидит, что будет ошибка, но, видимо, не судьба
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 23:42     Обьявление функций
Еще ссылки по теме:

C++ Обьявление и спользование символов
Обьявление полей класа C++
Требуется обьявление C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.10.2012, 23:42  [ТС]     Обьявление функций #10
Честно говоря, я подозревал, что так делается для удобства лицезрения кода.Но не мог и подумать, что всё это имеет такие глубокоидущие последствия...
спасибо всем, что ответили!

Добавлено через 9 минут
Цитата Сообщение от BumerangSP Посмотреть сообщение
Вопрос относился к:



Да, но я опять же не спрашивал ТС, почему все это так. Думал, он таки удалит прототип и увидит, что будет ошибка, но, видимо, не судьба
Я уезжал, и первое что сделал, когда приехал - это как раз таки удалил прототипы.До этого я уж догадался.
Yandex
Объявления
24.10.2012, 23:42     Обьявление функций
Ответ Создать тему
Опции темы

Текущее время: 22:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru