8. Argumenti komandne linije¶
Podeli svoje utiske o poglavlju na anketi OVDE.
Preduslovi za rad:
Poznavanje stringova
Poznavanje funkcija
Predstavljaju vrednosti koje se prosleđuju programu prilikom poziva. Primeri ovakvih poziva su uveliko poznati iz prakse, jer skoro svaka komanda u terminalu prima argumente komandne linije. Na primer:
mkdir direktorijum
gcc program.c
U primeru direktorijum
i program.c
predstavljaju vrednosti koje program prima spolja.
Način kako se prihvataju ove vrednosti u programskom jeziku C je tako što se main funkcija proširi sa dodatnim parametrima, koji se često tradicionalno nazivaju argc
i argv
.
argc
predstavlja broj, a argv
konkretne vrednosti argumenata.
Napomena:
Prvi argument je uvek ime programa!
8.1. Primer programa¶
Dat je primer programa koji kao vrednosti argumenata komandne linije prihvata ime i visinu osobe:
1#include <stdio.h>
2#include <stdlib.h>
3
4int main(int argc, char **argv)
5{
6 if(argc != 3)
7 {
8 printf("Primer poziva: %s Vladimir 187.3", argv[0]);
9 }
10 else
11 {
12 double visina = atof(argv[2]);
13
14 printf("Osoba %s je ", argv[1]);
15
16 if(visina > 180)
17 {
18 printf("visa");
19 }
20 else
21 {
22 printf("niza");
23 }
24
25 printf(" od 180cm.\n");
26 }
27
28 return 0;
29}
Primer poziva programa kada ima previše argumenata:
./a.out previse argumenata komandne linije
Ispis programa kada ima previše argumenata:
Primer poziva: ./a.out Vladimir 187.3
Primer regularnog poziva programa:
./a.out Milica 172
Ispis programa:
Osoba Milica je niza od 180cm.
Napomena:
argv predstavlja niz stringova, zbog toga se piše sa dve zvezdice.
Alternativni zapis je *argv[], na osnovu priče o prenosu nizova iz funkcija.
Jedna od vrednosti argumenata komandne linije predstavlja string, koji označava visinu osobe.
Pošto nije moguće raditi aritmetičke, logičke ili relacione izraze sa stringovima, potrebno je izvršiti konverziju u realni tip, u ovom slučaju.
To se vrši pomoću funkcije atof
. Ukoliko je potrebno konvertovati string u celobrojnu vrednost, koristi se funkcija atoi
.
Obe se nalaze u biblioteci stdlib.h
.