80
ROZDZIAŁ U. FUNKCJE
Na razie nie musisz rozumieć: powyższych kodów i opisów, gdyż odwołują się do pojęć takich jak tablica oraz wskaźnik, które opisane zostaną w dalszej części podręcznika.
Co ciekawe, funkcja main nie różni się zanadto od innych funkcji i tak jak inne może wołać sama siebie (patrz rekurencja niżej), przykładowo powyższy program można zapisać* tak4:
#include <stdio.h>
#include <stdlib.h>
int main(int arge, char **argv) { if (*argv) { puts(»argv);
return main(argc-l, argv+l);
} else {
return EXIT_SUCCESS;
Ostatnią rzeczą dotyczącą funkcji main jest zwracana przez nią wartość. Już przy omawianiu pierwszego programu wspomniane zostało, że jedynymi wartościami, które znaczą zawsze to samo we wszystkich implementacjach języka są 0, EXIT_SUCCKSS i E XI T.FA.IL U RE* zdefiniowane w pliku nagłówkowym stdlib.h. Wartość 0 i EXIT JSUCCESS oznaczają poprawne zakończenie programu (co wcale nie oznacza, że makro EXIT_SUCCESS ma wartość zero), natomiast EXIT_FAILURE zakończenie błędne. Wszystkie inne wartości są zależne od implementacji.
Dalsze informacje
Poniżej przekażemy ci parę bardziej zaawansowanych informacji o funkcjach w C. jeśli nie masz ochoty wgłębiać się w szczegóły, możesz spokojnie pominąć tę część i wrócić tu później.
Jak zwrócić kilka wartości?
Jeśli chcesz zwrócić z funkcji kilka wartości, musisz zrobić to w trochę inny sposób. Generalnie możliwe są dwa podejścia: jedno to “upakowanie*’ zwracanych wartości można stworzyć tak zwaną strukturę, która będzie prze-chowy wala kilka zmiennych (jest to opisane w rozdziale Typy złożone). Prostszym sposobem jest zwracanie jednej z wartości w normalny sposób a pozostałych jako parametrów. Za chwilę dowiesz się. jak to zrobić: jeśli chcesz zobaczyć przykład, możesz przyjrzeć się funkcji scanf() z biblioteki standardowej.
''Jeżeli ktoś lubi ekstrawagancki kod ciało funkcji main można zapisać jako return »argv ? puta(*argv). aainfargc-l, argv*l) : EJtlT.SUCCESS;, ak- nie radzimy stosować tak skomplikowanych i. bądź co l>ądź, mało czytelnych konstrukcji.
5 U w aga! Makra EXIT-SUCCESS i EXIT.FAIIX’RE te służą tylko i wyłącznic jako wartości do zwracania przez funkcję main(). Nigdzie indziej nic mają one zastopowania.