Łatwo jest uzmysłowić sobie, że programy nie zawsze muszą mieć interaktywnego działania przez czas ich działania. Często piszemy program realizujący jedną, ale konkretną funkcję, a później chcielibyśmy go wykorzystywać w najbardziej efektywny i nie angażujący sposób. W ten sposób można napisać program realizujący np. funkcję sortowania pliku tekstowego i nazywający się, dajmy na to sortuj.exe.
Teraz, gdy mamy już taki program sortujący możemy go wywołać z wnętrza innego programu przekazując mu poprzez parametry dane niezbędne do jego prawidłowego działania. Wyobraźmy sobie taką linię polecenia w naszym programie:
system(“sortuj.exe /a-z baza.txt”);
Co się teraz dzieje? System operacyjny uruchamia program sortuj.exe i przekazuje mu jako parametry ich listę w postaci tablicy. Jak się do niej dostać? Załóżmy, że mamy program:
int main(int argc, char** argv) { for (int i=0; i<argc; i++) printf("%s \r\n",argv[i]); return 0; }
Wynikiem jego działania będzie lista argumentów wyświetlona na konsoli. W ten sposób “z zewnątrz” programu przekazaliśmy mu wartości, które może on przetwarzać.
Jak widać – program wyświetlił zawartość tablicy argv o indeksach od 0 do argc – czyli powinniśmy mniemać, że argc to liczba argumentów przekazana do programu, gdzie argument z tablicy spod indeksu 0 to będzie nazwa naszego programu wraz ze ścieżką dostępu, a pozostałe to łańcuchy znakowe rozdzielone spacją.
Tak samo prosto możemy przekazać niejako “z powrotem” wartości wskazujące, że np. plik o nazwie baza.txt nie jest plikiem tekstowym i nie da się go posortować alfabetycznie od a do z. Wystarczy w tym celu zmienić kod wyjścia z programu na np. 222 czyli: return 222; (ustalony przez nas i wymieniony w naszej dokumentacji do programu sortuj.exe, który napisaliśmy). Teraz już program nadrzędny “wie”, że “coś nie wyszło” pomimo, że program sortuj.exe zadziałał prawidłowo.
W przypadku środowiska programistycznego możemy zasymulować przekazywanie parametrów do naszego programu wykorzystując opcje menu Uruchom>>Parametry i wpisując w polu Parametry do przekazania… ciąg tekstowy będący naszymi parametrami dla programu.
Podsumowanie:
- Do programu przekazujemy wartości jako parametry wymienione w postaci łańcuchów znakowych rozdzielonych spacją i umieszczonych w tablicy argv,
- Z powodu, że tablice w C/C++ nie mają informacji o ilości ich elementów, tą wartość program otrzymuje jako zmienna argc,
- kończąc program komendą return xx; możemy podać inny niż standardowy (xx=0) kod wyjścia, który będzie “naszą” informacją zwrotną dla programu nadrzędnego.