Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Prototypy funkcji

Ostatnio zmodyfikowano 2017-02-28 22:03
Autor Wiadomość
bobby.hl
Temat założony przez niniejszego użytkownika
Prototypy funkcji
» 2017-02-28 21:18:52
Witajcie,

mam pytanie. Otóż przerobiłem kurs C++ z tej stronki i zabrałem się za książkę S. Prata - Język C++. Szkoła programowania. Skończyłem właśnie drugi rozdział, w którym pojawiło się coś czego nie spotkałem przez cały kurs, mianowicie "prototypy funkcji" definiowane na początku programu. Na ile jest to niezbędne, skoro podczas pisania tych wszystkich programów z zadań domowych z kursu i w ogóle w kursie nie było o tym wspomniane (a już na pewno nie używane)? Czy przyjęty standard pisania kodu wymaga podawania prototypów każdej funkcji zawartej w danym programie? I wszystkie muszą/powinny być podane na początku programu?

Z góry dzięki za odp.
P-158389
carlosmay
» 2017-02-28 21:23:05
Prototypy przydają się gdy potrzebujemy poinformować w jakimś miejscu o istnieniu funkcji,
której definicja pojawia się dużo później. Rzadko z nich korzystam, ale jeśli już muszę coś takiego zrobić,
wydzielam je do osobnego pliku.
P-158390
Rashmistrz
» 2017-02-28 21:34:56
nie-jestem-expertem™

Prototyp funkcji to porostu taka deklaracja funkcji,
która nie jest definicją, bo nie ma ciała funkcji.
C/C++
void a(); /* prototyp/deklaracja */
void a() { } /* definicja/deklaracja */
P-158393
bobby.hl
Temat założony przez niniejszego użytkownika
» 2017-02-28 21:50:01
Prototypy przydają się gdy potrzebujemy poinformować w jakimś miejscu o istnieniu funkcji, której definicja pojawia się dużo później.

A w jakich okolicznościach w praktyce zachodzi taka potrzeba? i kogo poinformować - czytającego kod czy kompilator?
P-158396
Bielan
» 2017-02-28 21:52:52
Prototyp czyli deklaracja funkcji znajduje swoje zastosowanie szczególnie w momencie dzielenia kodu źródłowego na wiele plików. Deklaracja funkcji może pojawić się wiele razy natomiast definicja tylko raz. Co z tego wynika? Aby w projekcie podzielonym na pliki użyć tej samej funkcji trzeba rozpropagować jej deklarację. Definicji nie możemy powtórzyć ponieważ spowoduje to błąd kompilacji (z pewnymi wyjątkami).


Czy przyjęty standard pisania kodu wymaga podawania prototypów każdej funkcji zawartej w danym programie?
Jest to sposób na umożliwienie korzystania z danej funkcji w reszcie programu. Ciężko nazwać to standardem pisania, to po prostu sposób osiągnięcia określonego celu.


I wszystkie muszą/powinny być podane na początku programu?
Sens deklaracji jest ciężki do uchwycenia w przypadku projektów jednoplikowych. W przypadku wielu plików deklaracja pojawia się tam, gdzie chcesz umożliwić wykorzystanie danej funkcji w innych miejscach (plikach) w programie.


 i kogo poinformować - czytającego kod czy kompilator?
Deklaracja funkcji informuje, że na etapie linkowania programu, będzie dostępna jej definicja.
Coś w stylu:

W tym pliku masz tylko deklarację. Ok, to wszystko co mi jest potrzebne aby przygotować ci to wywołanie funkcji, ufam, że w innym pliku podczas linkowania znajdę odpowiednią definicję.
P-158397
carlosmay
» 2017-02-28 21:57:21
C/C++
#include <iostream>

// taka "deklaracja zapowiadająca"
void foo(); // jeśli zakomentujesz prototyp, nie będzie możliwa kompilacja

void foo2()
{
    std::cout << "foo2()\n";
    foo(); // ponieważ kompilator nie będzie wiedział, co to jest
}

void foo() // definicja jest dopiero tutaj, czyli po pierwszym wywołaniu tej funkcji
{
    std::cout << "foo()\n";
}

int main()
{
    foo2();
}
P-158399
bobby.hl
Temat założony przez niniejszego użytkownika
» 2017-02-28 22:03:55
czyli to dzięki deklaracji/prototypowi funkcji możliwe było w przykładach z książki napisanie najpierw main(), a dopiero potem funkcji w niej wykorzystanych (to też mnie zaskoczyło i zastanawiało).
zaczynam łapać, wielkie dzięki za zainteresowanie i szybką odpowiedź, bardzo pomogliście :)

pozdro!
P-158400
« 1 »
  Strona 1 z 1