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.