User Tools

Site Tools


prog2:a_funcao_main

A função main

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:

argv.c
#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

Para ler e tratar mais facilmente as opções da linha de comando informadas por argc/argv, sugere-se usar funções já prontas para isso, como 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).

retval.c
#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

Exercícios

  1. Escrever um programa para listar as variáveis de ambiente recebidas pelo programa (parâmetro envp da função main); essas variáveis podem ser consultadas no terminal (shell) através do comando env.
prog2/a_funcao_main.txt · Last modified: 2019/04/09 13:23 (external edit)