Até o momento, a definição da função main foi sempre utilizada em sua forma sem parâmetros. Há, no entanto, uma outra forma de definição de main que é utilizada para passar para o programa quais argumentos foram dados na linha de comando do sistema operacional. Nesta outra forma, main recebe dois parâmetros, como indicado abaixo:
int main(int argc, char *argv[]) {
...
}
O primeiro parâmetro, argc, indica o número de tokens presente na linha de comando. Por exemplo, uma chamada a um programa de nome eco com dois argumentos, como
eco um doisfaria com que o valor de argc passado para a função main fosse igual a três.
O segundo parâmetro, argv, é um arranjo de strings, onde cada elemento do arranjo representa um dos tokens da linha de comando. Assim, no exemplo acima a função main receberia as seguintes strings nesta variável:
argv[0]: a string "eco";
argv[1]: a string "um";
argv[2]: a string "dois".
Observe que argv[0] sempre armazenará o nome do programa sendo
executado, enquanto que argv[i] armazenará o
-ésimo argumento
passado para o programa, para
variando de 1 até
argc-1.
Um exemplo simplificado de uma rotina que ecoe seus argumentos é apresentado abaixo, ilustrando o uso de argc e argv:
/*
* eco.c: repete os argumentos da linha de comando
*/
main(int argc, char *argv[]) {
int i = 1;
/* apresenta todos argumentos a partir de argv[1] */
while (i < argc) {
printf("%s ", argv[i]);
++i;
}
/* terminando, passa para proxima linha */
printf("\n");
}
Este exemplo também ilustra uma outra convenção usual em programas C: a definição do valor de retorno de main. Em geral, um valor de retorno diferente de 0 servirá para indicar ao sistema operacional (ou a um outro processo que tenha ativado este programa) que alguma condição de erro ocorreu que impediu o programa de completar com sucesso sua execução; o valor de retorno 0 indica um a terminação com sucesso.