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

Prototyp funkcji.

Ostatnio zmodyfikowano 2009-06-24 14:36
Autor Wiadomość
Fletcher
Temat założony przez niniejszego użytkownika
Prototyp funkcji.
» 2009-06-23 12:39:42
Cześć, mógł by mi ktoś powiedzieć po co robi się prototypy funkcji?
P-7938
WunM
» 2009-06-23 13:01:29
To ci się nie skompiluje:
C/C++
int main()
{
    cze();
    return 0;
}

void cze()
{
}

To się skompiluje:
C/C++
void cze()
{
}

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

ale jest brzydkie więc można tak:

C/C++
void cze();

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

void cze()
{
}

Użyto prototypu funkcji i jest ładniej - nie zaśmieca nic przed mainem (przynajmniej niektórzy tak sądzą)
P-7940
DeBugger
» 2009-06-23 21:02:48
@up:
I wywala takie oto errory:
/tmp/ccUtM8hj.o: In function `main':
func.cpp:(.text+0x12): undefined reference to `foo()'
collect2: ld returned 1 exit status
Tutaj kod źródłowy:
C/C++
void foo();
int main()
{
    foo();
}
P-7962
WunM
» 2009-06-23 21:10:23
A gdzie ciało funkcji foo?
P-7965
DeBugger
» 2009-06-23 21:37:47
No właśnie - ukazuję błąd. Jest deklaracja ale definicję foo (:D) wzięło.
P-7966
pompom
» 2009-06-25 06:04:31
Może inaczej... (pytanie było dlaczego, a nie jak)
Kompilator C/C++ przechodzi cały kod programu tylko raz, 'z góry na dół', więc jeśli używa się 'u góry' czegoś 'z dołu' to kompilator nie wie co to. Prototyp dostarcza tę informację wcześniej. Dzięki takim zasadom kompilacja jest szybsza i zajmuje mniej pamięci.
Nowe optymalizujące kompilatory i tak robią to inaczej, ale ze względu na standardy muszą ciągle 'wyglądać' jak stare.

Niektóre (nowocześniejsze) języki tego nie wymagają - co daje większe możliwości.
P-8028
manfred
» 2009-06-23 13:47:47
Jeśli kompilator nie dostał prototypu funkcji to nie można jej wywołać, bo dla kompilatora nie istnieje. Proste.
P-18982
manfred
» 2009-06-24 14:36:01
Ale to szczegół, który nie jest ważny dla kompilatora. On musi mieć tylko prototyp (przypominam, że definicja też dostaracza prototyp), żeby funkcję można było wywołać.
P-18984
« 1 »
  Strona 1 z 1