C/Funkcje: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Linia 494:
 
Celem funkcji main() jest:<ref>[https://opensource.com/article/19/5/how-write-good-c-main-function opensource article: how-write-good-c-main-function]</ref>
* zebranie argumentów programu podanych przez użytkownika
* wykonanie minimalnej walidacji danych wejściowych
* następnie przekazanie zebranych argumentów do funkcji, które będą ich używać
Linia 503:
*<tt>int main(int argc, char **argv);</tt> <ref>Czasami można się spotkać z prototypem <tt>int main(int argc, char **argv, char **env);</tt>, który jest definiowany w standardzie POSIX, ale wykracza już poza standard C.</ref>
 
Argumenty funkcji main:
Argument '''<tt>argc</tt>''' jest liczbą nieujemną określającą, ile ciągów znaków przechowywanych jest w tablicy '''<tt>argv</tt>'''. Wyrażenie <tt>argv[argc]</tt> ma zawsze wartość NULL. Pierwszym elementem tablicy <tt>argv</tt>, czyli argv[0] (o ile istnieje<ref>Inne standardy mogą wymuszać istnienie tego elementu, jednak jeśli chodzi o standard języka C to nic nie stoi na przeszkodzie, aby argument argc miał wartość zero.</ref>) jest nazwa programu<ref>[http://stackoverflow.com/questions/2050961/is-argv0-name-of-executable-an-accepted-standard-or-just-a-common-conventi Stackoverflow : Is “argv[0] = name-of-executable” an accepted standard or just a common convention?
* Pierwszy argument '''<tt>argc</tt>''' (ang. '''arg'''ument '''c'''ount )<ref>[https://ece.uwaterloo.ca/~dwharder/icsrts/C/05/ Command-line Arguments: main( int argc, char *argv[<nowiki>]</nowiki> ) by Douglas Wilhelm Harder from University of Waterloo Canada ]</ref> określa liczbę argumentów programu. Jest to liczba nieujemną. Argument programu to ciągów znaków przechowywanych jest w tablicy <tt>argv</tt>.
]</ref> czy komenda, którą program został uruchomiony. Pozostałe przechowują argumenty podane przy uruchamianiu programu.
* drugi argument '''<tt>argv</tt>''' (ang. '''arg'''ument '''v'''ector ) to wskaźnik tablicy zawierającej argumenty programu
 
Właściwości tablicy <tt>argv</tt>
Argument '''<tt>argc</tt>''' jest liczbą nieujemną określającą, ile ciągów znaków przechowywanych jest w tablicy '''<tt>argv</tt>'''. Wyrażenie <tt>argv[argc]</tt> ma zawsze wartość NULL.* Pierwszym elementem tablicy <tt>argv</tt>, czyli argv[0] (o ile istnieje<ref>Inne standardy mogą wymuszać istnienie tego elementu, jednak jeśli chodzi o standard języka C to nic nie stoi na przeszkodzie, aby argument argc miał wartość zero.</ref>) jest nazwa programu<ref>[http://stackoverflow.com/questions/2050961/is-argv0-name-of-executable-an-accepted-standard-or-just-a-common-conventi Stackoverflow : Is “argv[0] = name-of-executable” an accepted standard or just a common convention?
]</ref> czy komenda, którą program został uruchomiony.
]</ref> czy komenda, którą program został uruchomiony.* Pozostałe przechowują argumenty podane przy uruchamianiu programu.
* ostatnią wartością tablicy czyli <tt>argv[argc]</tt> ma zawsze wartość NULL
 
Zazwyczaj jeśli program uruchomimy poleceniem:
Linia 559 ⟶ 566:
 
Ostatnią rzeczą dotyczącą funkcji <tt>main</tt> jest '''zwracana''' przez nią '''wartość'''.<ref>[https://www.quora.com/If-we-use-void-main-why-does-the-function-give-same-output-like-int-main quora: If-we-use-void-main-why-does-the-function-give-same-output-like-int-main]</ref> Już przy omawianiu [[C/Pierwszy program|pierwszego programu]] wspomniane zostało, że jedynymi wartościami, które znaczą zawsze to samo we wszystkich implementacjach języka są 0, EXIT_SUCCESS i EXIT_FAILURE<ref>Uwaga! Makra EXIT_SUCCESS i EXIT_FAILURE te służą tylko i wyłącznie jako wartości do zwracania przez funkcję <tt>main()</tt>. Nigdzie indziej nie mają one zastosowania.</ref> zdefiniowane w pliku nagłówkowym stdlib.h. Wartość 0 i EXIT_SUCCESS 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.
 
===usage===