Prototyp funkcji.
Ostatnio zmodyfikowano 2009-06-24 14:36
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? |
|
WunM |
» 2009-06-23 13:01:29 To ci się nie skompiluje: int main() { cze(); return 0; }
void cze() { }
To się skompiluje: void cze() { }
int main() { cze(); return 0; } ale jest brzydkie więc można tak: 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ą) |
|
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: void foo(); int main() { foo(); } |
|
WunM |
» 2009-06-23 21:10:23 A gdzie ciało funkcji foo? |
|
DeBugger |
» 2009-06-23 21:37:47 No właśnie - ukazuję błąd. Jest deklaracja ale definicję foo (:D) wzięło. |
|
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.
|
|
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. |
|
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ć. |
|
« 1 » |