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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
#1

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

24.10.2012, 16:24. Просмотров 1042. Ответов 9
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане!
Возник вопрос качательно обьявления функций.
Сейчас читаю книгу Стивена Прата "Язык программирования С++", и там есть такой кусок кода:
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 16:24     Обьявление функций
Посмотрите здесь:

Требуется обьявление - C++
Здравствуйте, нужна помощь, не могу понять в чем проблема. Пытаюсь написать класс очереди для задания. Хочу написать цикл for, но for...

Обьявление полей класа - C++
Доброго дня! Как скомпилить #include &lt;iostream&gt; class Counter { public: ...

Обьявление массива в классе - C++
Как при создании своего класса Дата обьявить массив, в котором задаётся количество дней по месецам? При этом этот массив используется в...

Обьявление локальных переменных - C++
Добрый день. В какой последовательности объявляются локальные переменные в функции? Если вызвать return раньше обьявления, будет ли...

Обьявление переменных в циклах и до - C++
Возник вопрос почему? Без обьявления int x = 1; до цикла возникает ошибка при компиляции программы ... Хотя в книжке обьявление типа и...

Обьявление и спользование символов - C++
Пример использования #include &lt;string.h&gt; #include &lt;stdio.h&gt; /* для printf() */ int main() { char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
4286 / 1408 / 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
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.10.2012, 17:20     Обьявление функций #6
-=ЮрА=-, в том смысле, что если без прототипов расположить функции в таком порядке, причем если вызываемая функция будет описана ниже вызывающей, то будет ошибка? Ну, собственно, я и хотел об этом намекнуть, может и неудачно.
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
4286 / 1408 / 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++
Всем привет. Я написал программу, которая считает обратную матрицу путем элементарных преобразований. В Def C++ она отлично работает с...

Массивы - обьявление типов данных - C++
Запутался в типах.. подскажите кому лучше что присвоить. кусок проги, в ней ввод массива ну и попытка вычислить среднее арифметическое.....

Что означает такое обьявление функции? - C++
SimpleCat &amp;TheFunction()

Обьявление переменной, программа, загадывающая часло - C++
Была уже тема с такой программой, но у меня много ошибок выдает, и я не понимаю где и как нужно правильно обьявить переменные что бы все...


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

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

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



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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru