Gli argomenti argc
e argv
di main
viene utilizzato come un modo per inviare argomenti per un programma, il modo forse più familiare è quello di utilizzare il buon terminale ol' in cui un utente può digitare cat file
. Qui la parola cat
è un programma che prende un file e lo invia all'output standard (stdout
).
Il programma riceve il numero di argomenti argc
e il vettore di argomenti a argv
, in quanto precede, la arg ument c ount sarebbe due (I conteggi nome del programma come primo parametro) e il arg ument v ettore conterrà [cat
, file
, null]. Mentre l'ultimo elemento è un puntatore nullo.
Comunemente, si dovrebbe scrivere in questo modo:
int // Specifies that type of variable the function returns.
// main() must return an integer
main (int argc, char **argv) {
// code
return 0; // Indicates that everything went well.
}
Se il programma non richiede alcun argomento, è altrettanto valida per scrivere un main
-funzione nel modo seguente:
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
Nelle prime versioni del linguaggio C, non esisteva loprima del main
, poiché ciò era implicito. Oggi, questo è considerato un errore.
Su POSIX sistemi -compliant (e Windows), esiste la possibilità di utilizzare un terzo parametro char **envp
che contiene un vettore di programmi environment variables. Sono disponibili ulteriori varianti dell'elenco di argomenti della funzione main
, ma non lo descriverò qui poiché non è standard.
Inoltre, la denominazione delle variabili è una convenzione e non ha alcun significato. E 'sempre una buona idea di aderire a questo in modo che non confondere gli altri, ma sarebbe ugualmente valido per definire main
come
int main(int c, char **v, char **e) {
// code
return 0;
}
E riguarda la seconda domanda, ci sono diversi modi per inviare argomenti a una programma. Vorrei raccomandare a guardare la exec*()
family of functions che è POSIX -standard, ma è probabilmente più facile usare solo system
("command arg1 arg2")
, ma l'uso di system()
di solito è visto di buon occhio in quanto non è garantito il funzionamento su ogni sistema. Non l'ho provato da solo; ma se non c'è bash
, zsh
o altra shell installata su un sistema * NIX, system()
avrà esito negativo.
Si noti che se non si intende utilizzare gli argomenti della riga di comando, è perfettamente consentito (e molto ragionevole) definire la funzione 'int main (void)' o 'int main()'. Il tipo di ritorno ('int') è obbligatorio in C99 o C11; a volte i compilatori ti lasciano omesso se non specifichi quale versione dello standard C aderisce al tuo codice. Vedi anche [Cosa dovrebbe 'main()' restituire in C e C++] (http://stackoverflow.com/questions/204476/). –