2.4 Argumenty wywołania

Jak wspomnieliśmy, do programu można przekazać dane za pomocą argumentów wywołania. Opiszemy to pokrótce teraz, aby Czytelnik mógł używać tego mechanizmu w pisanych przez siebie programach. Pełne jego zrozumienie możliwe będzie jednak dopiero po zapoznaniu się z tablicami, wskaźnikami i funkcjami w następnych rozdziałach.

Aby korzystanie z argumentów wywołania było możliwe, funkcja main programu powinna być zdefiniowana z nagłówkiem

       int main(int argc, char **argv)
lub, równoważnie,
       int main(int argc, char *argv[])
Pierwszy parametr, o zwyczajowej nazwie argc, jest liczbą argumentów podanych podczas wywołania programu. Pierwszym z tych argumentów, o numerze 0, jest zawsze nazwa wywoływanego programu. Tak więc argc jest zawsze co najmniej jeden. Zmienna argv wygląda trochę tajemniczo, ale tak naprawdę jest tablicą napisów zawierających kolejne argumenty wywołania: argv[0], argv[1], ..., argv[argc-1]; indeksowanie rozpoczyna się od zera, dlatego ostatnią wartścią indeksu jest argc-1nie argc. Tablica ta jest podobna do tablicy, nazywanej zwykle args, w Javie. Ponieważ, jak się przekonamy, tablice w C/C++ nie są obiektami i nie zawierają odpowiednika zmiennej obiektowej length z Javy, więc trzeba było przekazać tablicę napisów reprezentujących argumenty oraz, osobno, rozmiar tej tablicy (poprzez parametr argc). Więcej szczegółów na temat tablic napisów podamy w rozdziale o tablicach napisowych .

Tak więc, na przykład, program wypisujący swoje argumenty wywołania mógłby mieć postać:


P6: argumenty.cpp     Argumenty wywołania

      1.  #include <iostream>
      2.  using namespace std;
      3.  
      4.  int main(int argc, char **argv) {
      5.      cout << "Nazwa programu:   " << argv[0]  << endl
      6.           << "Ilosc argumentow: " << argc     << endl;
      7.      for (int i = 1; i < argc; i++)
      8.          cout << "Argumentem nr " << i       << " jest "
      9.                                   << argv[i] << endl;
     10.  }

którego uruchomienie wyglądało następująco:

    cpp> g++ -o argumenty argumenty.cpp
    cpp> argumenty 12 a "b c" 'd e'
    Nazwa programu: argumenty
    Ilosc argumentow: 5
    Argumentem nr 1 jest 12
    Argumentem nr 2 jest a
    Argumentem nr 3 jest b c
    Argumentem nr 4 jest d e
Jak widzimy, można do programu przekazywać jako pojedyncze argumenty napisy zawierające odstępy, jeśli tylko ujmiemy je w cudzysłowy lub apostrofy. W powyższym przykładzie argumentów wywołania jest pięć; pierwszy, o indeksie 0, jest nazwą programu, w tym przypadku argumenty.

T.R. Werner, 21 lutego 2016; 20:17