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

Прототип функции - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 90, средняя оценка - 4.96
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
27.08.2009, 22:49     Прототип функции #1
Скажите,какой смысл описывать протип функции, тоесть первую строчку функции, прописывать ещё раз вверху, перед функцией main(). Что это даёт,я так и не понял?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2009, 22:49     Прототип функции
Посмотрите здесь:

C++ прототип функции
C++ Прототип функции С++
Прототип функции C++
C++ Прототип функции
Прототип функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.08.2009, 22:52     Прототип функции #2
А если у тебя функция используется в мэйн до ее определения? Его наверх переносить? Два раза прогонять?
А если писать по правилам, то ты все определения функций в одном месте с кодом держишь? Хорошо бы в отдельный заголовочный файл с прототипами и отдельный спп-файл с реализациями.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
27.08.2009, 22:56  [ТС]     Прототип функции #3
Дайте пример пожалуйста,если не сложно,чтоб увидеть и понять, зачем нужен прототип функции.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.08.2009, 22:58     Прототип функции #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
void show();
 
int main()
{
    show();
    cin.get();
    return 0;
}
 
void show()
{
    cout<<"func "<<endl;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main()
{
    show();
    cin.get();
    return 0;
}
 
void show()
{
    cout<<"func "<<endl;
}
Добавлено через 1 минуту
До более нормальных примеров современем дойдешь сам.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
27.08.2009, 22:58     Прототип функции #5
Syltan, что за прототип?...напиши код ниче не понял...
для таких вопросох книжки существуют
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
27.08.2009, 23:01     Прототип функции #6
@lex, в примере из поста 4 "void show();" называется словом "прототип". Т.е. описание типов параметров и типа результата функции без определения тела самой функции
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.08.2009, 23:04     Прототип функции #7
Evg, думаю, автор ставил вопрос так "а нафига мне описывать типы, параметры и тип результата функции без определения тела самой функции" ))
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 23:08     Прототип функции #8
Цитата Сообщение от Syltan Посмотреть сообщение
Скажите,какой смысл описывать протип функции, тоесть первую строчку функции, прописывать ещё раз вверху, перед функцией main(). Что это даёт,я так и не понял?
в принципе в с++ вы можете функцию не декларировать, а сразу определять. но условие: компилятор должен прочесть ее до первого обращения к ней.
иногда вы обязаны декларировать "раньше". например, если вы пишете библиотеку, которую будете поставлять вместе с заголовочным файлом.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
27.08.2009, 23:10     Прототип функции #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Evg, думаю, автор ставил вопрос так "а нафига мне описывать типы, параметры и тип результата функции без определения тела самой функции" ))
Дык я не автору отвечал, а товарищу, который вопрос автора не осилил
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
27.08.2009, 23:13  [ТС]     Прототип функции #10
Тоесть прототип функции, описуется после
C++
1
using namespace std;
для того,чтоб можно было вызвать функцию раньше,чем она описана. Тоесть вначале вызвать, а потом описать её.
HIMen
 Аватар для HIMen
4104 / 1353 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
27.08.2009, 23:17     Прототип функции #11
Syltan, я тоже раньше не понимал, зачем это нужно, разобрался только когда в проектах появилось по несколько .h и .cpp.
Если у тебя один .h включен в несколько других .h то компилятор будет ругаться
one or more multiply defined symbols found
поэтому надо разделять заголовки в .h и сами функции в .cpp
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
27.08.2009, 23:17     Прототип функции #12
Цитата Сообщение от Syltan Посмотреть сообщение
Тоесть прототип функции, описуется после
C++
1
using namespace std;
для того,чтоб можно было вызвать функцию раньше,чем она описана. Тоесть вначале вызвать, а потом описать её.
Правильно. только фразу "описуется после using namespace std;" надо вычеркнуть. Когда компилятор видит вызов "func (10, 20);" то к этому моменту он должен знать, какие типы параметров и сколько их вообще. Если функция описана "ниже", то без прототипа будет ошибка
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 23:29     Прототип функции #13
Цитата Сообщение от Syltan Посмотреть сообщение
Тоесть прототип функции, описуется после
C++
1
using namespace std;
для того,чтоб можно было вызвать функцию раньше,чем она описана. Тоесть вначале вызвать, а потом описать её.
странный подход. вы о компиляции говорите, или о выполнении?
а с
C++
1
using namespace std;
это вообще никак не связано
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
27.08.2009, 23:30  [ТС]     Прототип функции #14
О компиляции,что программа не скомпилится, если не поставить после этой строки, но оказывается наверное это ошибочно считать, тоесть по словам Эвга.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
27.08.2009, 23:36     Прототип функции #15
Цитата Сообщение от Syltan Посмотреть сообщение
О компиляции,что программа не скомпилится, если не поставить после этой строки, но оказывается наверное это ошибочно считать, тоесть по словам Эвга.
короче: компилятор не скомпилирует обращение к фии, если не будет каким-то образом знать формат фии. он просто не сумеет это правильно сделать.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.08.2009, 23:41     Прототип функции #16
Прототипом ты просто показываешь, что у тебя есть такая-то функция. Где она будет определена не суть важно. Я до вызова main указал, что show есть. Все.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
27.08.2009, 23:44     Прототип функции #17
Цитата Сообщение от novi4ok Посмотреть сообщение
короче: компилятор не скомпилирует обращение к фии, если не будет каким-то образом знать формат фии. он просто не сумеет это правильно сделать.
В Си в большинстве случаев будет только предупреждение. В Си++ - ошибка
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
28.08.2009, 00:06     Прототип функции #18
Цитата Сообщение от Vourhey Посмотреть сообщение
Прототипом ты просто показываешь, что у тебя есть такая-то функция. Где она будет определена не суть важно. Я до вызова main указал, что show есть. Все.
важно не только "есть", а еще и "какая". иначе обращение к ней невозможно скомпилировать. в принципе допускаю, что компилятор может быть многопроходным (он такой и есть), и в одном из проходов собирать только информацию о всех существующих ф-ях, и ругаться только если уже все прошли, но вот вызывается ф-я, декларация которой не была найдена в предыдущих проходах. но те несколько компиляторов, которые мне приходилось юзать, ругаются, если до момента вызова прототип не был где-то встречен.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
28.08.2009, 00:09     Прототип функции #19
2novi4ok: дело не в проходах компилятора. Компилятору если нужно - он и 10 проходов сделает. Дело в том, как по стандарту должен реагировать компилятор на отсутствие прототипа. Вот как в стандарте написано - так и реагирует
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2009, 00:11     Прототип функции
Еще ссылки по теме:

прототип функции C++
C++ Прототип функции
C++ Прототип функции

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
28.08.2009, 00:11     Прототип функции #20
Цитата Сообщение от novi4ok Посмотреть сообщение
но те несколько компиляторов, которые мне приходилось юзать, ругаются, если до момента вызова прототип не был где-то встречен.
А ты попробуй компиляторы Си, а не Си++ - картина будет несколько другая. Как odip верно подметил - эте не прихоть компилятора, а стандарт языка
Yandex
Объявления
28.08.2009, 00:11     Прототип функции
Ответ Создать тему
Опции темы

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