Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прототипы функции, помогите розобратся 
V
    Опции темы
Sergio
Дата 20.10.2006, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Всем привет. Читаю книгу и не могу розобратся с прототипами функции... smile  Подскажите пожалуйста чем они отличаются от функций....и зачем они вообще нужны... smile 
И если можно то примерчик какой-нибудь  smile 
Спасибо.
PM MAIL ICQ   Вверх
Alexeis
Дата 20.10.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Sergio, Прототип функции это ее опережающее описание. Он служит знаком компилятору, что где-то в проекте есть процедура с таким имененм и параметрами. Тогда компилятор встречая ее вызов знает, что как передается ей и кроме того он знает, что ее нужно включить в код или подключить из библиотеки. Если реализация функции выше места ее использования, то прототип не нужет, так как вся нужная информация у компилятора уже есть. Если же ее реализация ниже по тексту или вообще в другом моделе или библиотеке, то прототип должен быть обязательно описан перед первым вызовом этой функции.

Прототип представляет собой заголовок функции и параметрами, после которых идет ";" вместо фигурных скобок.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
vinter
Дата 20.10.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

.и зачем они вообще нужны... 

1.хороший стиль описывать ф-ии в отдельных заголовках, их обьявления находятся в .h, который в свою очередь подключается к нужному файлу проекта..
2.при описании класса не будешь же ты определять ф-ии внутри класса..
3. если ф-ия 1 используется в ф-ии 2, тогда придется заботится про определение ф-ии 1 до ф-ии 2, что может запутать при большом кол-ве ф-ий..
обьявления решают все эти проблемы smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
EvgenZ
Дата 20.10.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Код

#include <iostream>
int fun1(char);  //поиграй с этой строкой...

void fun2(){
    char a = 'a';
    std::cout << fun1(a);
}

int fun1(char ch){
    int a = ch -'0';
    return a;
}

int main(){
    fun2();
return 0;
}


что-то вроде этого

alexeis1 тупанул  smile 

Это сообщение отредактировал(а) EvgenZ - 20.10.2006, 15:36


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Alexeis
Дата 20.10.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



EvgenZ, А конопочка "КОД" для чего дана?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
WERITAS
Дата 20.10.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Коротко и ясно: прототип ф-ции нужен, чтобы компилятор видел какие у нее параметры smile


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
EvgenZ
Дата 20.10.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Цитата
Коротко и ясно: прототип ф-ции нужен, чтобы компилятор видел какие у нее параметры

Коротко, но не ясно  smile .  
По функциям не помню, а вот с классами бывает так, что в одном классе используется ссылка на другой класс, а первый класс содержит ссылку на первый, т.е. без первого не создашь второй и наоборот. Для того чтобы скомпилировалось надо сделать объявление одного класса и после описывать второй и потом уже описывать первый. В функциях вроде такая же тема.


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
bsa
Дата 20.10.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(EvgenZ @ 20.10.2006,  16:50)
Коротко, но не ясно  smile .  
По функциям не помню, а вот с классами бывает так, что в одном классе используется ссылка на другой класс, а первый класс содержит ссылку на первый, т.е. без первого не создашь второй и наоборот. Для того чтобы скомпилировалось надо сделать объявление одного класса и после описывать второй и потом уже описывать первый. В функциях вроде такая же тема.

Если функция вызывает себя (в т.ч. и через другую функцию), то она рекурсивная. Рекурсия используется не очень часто. Но не смотря на это в Си подавляющее большинство функций объявлено прототипами (в .h файлах). smile
WERITAS был прав.
PM   Вверх
vinter
Дата 20.10.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

Если функция вызывает себя (в т.ч. и через другую функцию), то она рекурсивная.

че то я не понял ты хочешь сказать, что при конструкции
Код

func1()
{
    func2();
}

func2() является рекурсивной??

Добавлено @ 18:16 
правильно
Код

#include <stdio.h>
void func1();
void func2();

int main()
{
    func1();
    return 0;
}

void func1()
{
    printf("Preved");
    func2();
}


void func2()
{
    printf("Medved");
}



неправильно
Код

#include <stdio.h>
void func1()
{
    printf("Preved");
    func2();
}


void func2()
{
    printf("Medved");
}

int main()
{
    func1();
    return 0;
}


=> EvgenZ прав 
Цитата

WERITAS был прав.

никто обратного не утверждал smile 
просто
Цитата

Коротко, но не ясно 




--------------------
Мой блог
PM MAIL WWW   Вверх
JackYF
Дата 20.10.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Нет, он хотел сказать что func2 будет рекурсивной при:

Код

void func1();
void func2();
...
void func1()
{
    func2();
}
...
void func2();
{
    func1();
}



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
vinter
Дата 20.10.2006, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



понятно.. замкнутый круг какой-то smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
JackYF
Дата 20.10.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Ну, вообще-то в этом случае, как и в обычной рекурсии, хотя бы в 1-ой из функций присутствуют условия окончания рекурсии.

В выложенном варианте - да, stack overflow обеспечен...  smile 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Sergio
Дата 20.10.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Народ, то я так понял что прототип функция - это обявление функции (перед функцией main) и всё???  smile 
PM MAIL ICQ   Вверх
Daevaorn
Дата 20.10.2006, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Sergio @  20.10.2006,  23:33 Найти цитируемый пост)
 это обявление функции (перед функцией main) и всё???  

Не обязятельно. Можно и послеsmile. Прототип - это предварительное объявление сигнатуры функции, которое дает фозможность её использовать.
PM MAIL WWW   Вверх
Xenon
Дата 20.10.2006, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Чтобы компилятор знал эту функцию smile


--------------------
user posted image  
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.