![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| EvgenZ |
|
||||||
![]() Freedom in me ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 3.8.2006 Репутация: 1 Всего: 11 |
Да я собственно и не говорил, что неправильно, я просто сказал, что непонятно. Самый простой, надежный и логичный способ спросить это у того, кому предназначалась эта строка. Sergio в С выполнение (и просмотр при компиляции) идет построчно, т.е.
у тебя будет ошибка, так как ты пытаешься использовать переменную которой еще нет во второй строке приведенного примера, но она есть дальше!!! Таже ситуация с функциями, компилятор смотрит, что есть функция (а функция в свою очередь должна быть, как все функции в С, уникальной. Что дает уникальность? - правильно, имя и список параметров) которая используется в данном куске, он вдиит, что она объявлена и дает компилировать, а если не находит, то.... vinter респект -------------------- <удалено администрацией форума> |
||||||
|
|||||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Но я не пойму зачём это делать??
|
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Из-за идиомы заголовок-реализация. Ты подключаешь только заголовки(*.h или *.hpp), из которых компилятор узнает об определениях. А сам код непосредсвенно компилируется отдельно(*.c или *.cpp) в объектные файлы. Советую почитать книги по С++. Там об этом пишут. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Sergio, Если определишь функцию до функции из которой ее вызываешь - пожалуйста, можешь забить на прототипы
Прототип функции может быть пропущен, если определение функции следует до первого ее вызова из другой функции, хотя это не привествуется в программировании, ибо бывают случаи перекрестных вызовов - две или несколько функций вызывают друг друга, в результате чего невозможно вызывать одну функцию без предворительного определения другой. Это сообщение отредактировал(а) Xenon - 21.10.2006, 00:06 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Проще, если программа маленькая и состоит из не более чем десяти функций. Но когда количество функций исчисляется сотнями, то ты помрешь при отладке (я уж не говорю про компиляцию - поменял 1 на 2, и все компилируется заново). Поэтому такие крупные программы разбивают на модули, а связь между модулями реализуют через заголовочные файлы. И изменив один из файлов, тебе придется скомпилировать только его, а не все. Да и отлаживать проще, так как судя по ошибке ты сразу определяешь в каком модуле проблема и уже ищешь ошибку в 10 функциях, а не в нескольких сотнях. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Вот, например ...
Компилятор тебя пошлет нафиг, так как он скажет: "А кто такая func2()?". Без прототипа не обойтись. Пример глупый и тут, конечно, как нефиг делать - можно просто func2 определить перед main() и все, но бывают примеры посложнее где иначе никак |
|||
|
||||
| knut |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 7.2.2006 Репутация: нет Всего: нет |
Sergio,
допустим у тебя етсть функц. func а эту вункц ты реализуеш отдельно а вызов происхоет в маин. вот если не будет прототипа то компилятор не узнает о какой функц идет речь P.S он конечно умный но не до такой степени.
--------------------
|
||||
|
|||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
ВСе привели один и тот же пример, в принципе
Если человек и сейчас не поймет, то я уже не знаю как объяснить |
|||
|
||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Народ, то я так понял, что функции прототипы, это как абстрактные функции в класах (без определения, только заголовок). А реализация может быть в середине другой функции. Правильно или нет?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
неправильно! Реализация не может находиться в другой функции - по определению. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 12 Всего: 459 |
В с++ Функции могут находится только внутри модуля, но не внутри некоторой функции. Такая штука возможна только в паскале.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Тепер понял.
|
|||
|
||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
... и возвращаемое значение. Однако в отношении классов иногда важен ещё и их размер. Тогда одним объявлением не обойдёшься:
Что касается функций, то в редких случаях их объявление может пригодиться как средство разрешения области видимости:
|
||||||
|
|||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
UnrealMan, откуда информация насчет не принятия участия в перегрузке?
То есть если я в этом случае вызову
Вызовется Func(int) ??? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |