A função main
é o local de início (entry point) da execução de um código em C. Apesar de termos usado até o momento essa função sem parâmetros, ela possui alguns parâmetros que permitem a comunicação entre o programa em C e o sistema operacional.
O protótipo da função main
depende do sistema operacional subjacente:
// padrão C ANSI int main (void) ; int main (int argc, char **argv) ; int main (int argc, char *argv[] ); // sistemas UNIX-like (Linux, FreeBSD, Solaris, ...) e Windows int main (int argc, char **argv, char **envp) ; // sistemas Apple (MacOS, iOS, ...) int main (int argc, char **argv, char **envp, char **apple) ;
Significado dos parâmetros usuais:
argc
: número de parâmetros na linha de comando que lançou a execução;argv
: vetor de strings (char *
) contendo os parâmetros da linha de comando, finalizado por um ponteiro nulo;envp
: vetor de strings (char *
) na forma “nome=valor” contendo as variáveis de ambiente do shell que lançou a execução do programa (também finalizado por um ponteiro nulo);O código a seguir imprime na tela os parâmetros usados no lançamento do programa:
#include <stdio.h> int main (int argc, char **argv, char **envp) { int i ; printf ("Numero de parâmetros: %d\n", argc) ; for (i=0; i<argc; i++) printf ("argv[%d]: %s\n", i, argv[i]) ; return (0) ; }
Um exemplo de compilação e execução do código acima:
$ gcc argv.c -o argv -Wall $ ./argv teste 1 2 3 --help Numero de parâmetros: 6 argv[0]: ./argv argv[1]: teste argv[2]: 1 argv[3]: 2 argv[4]: 3 argv[5]: --help
getopt
ou arg_parse
(link)
Outro canal de interação importante entre o programa C e o sistema operacional é o valor de retorno da função main
, que é devolvido ao SO após a execução na forma de um status de encerramento (exit status).
#include <stdio.h> int main (int argc, char **argv, char **envp) { return (14) ; }
O status de encerramento de um processo pode ser consultado no terminal UNIX (shell Bash) através da variavel $?
disponível no shell:
$ gcc retval.c -o retval -Wall $ ./retval $ echo $? 14
envp
da função main
); essas variáveis podem ser consultadas no terminal (shell) através do comando env
.