Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior | |||
| c:a_funcao_main [2023/08/01 17:12] – edição externa 127.0.0.1 | c:a_funcao_main [2023/08/15 11:55] (atual) – maziero | ||
|---|---|---|---|
| Linha 1: | Linha 1: | ||
| + | ====== A função main ====== | ||
| + | |||
| + | {{ progc_funcao_main.mkv |Video desta aula}} | ||
| + | |||
| + | {{ main.png? | ||
| + | |||
| + | ===== Protótipos ===== | ||
| + | |||
| + | O protótipo da função '' | ||
| + | |||
| + | <code c> | ||
| + | // 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) ; | ||
| + | </ | ||
| + | |||
| + | ===== Argumentos da linha de comando ===== | ||
| + | |||
| + | Significado dos parâmetros usuais: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | O código a seguir imprime na tela os argumentos usados no lançamento do programa: | ||
| + | |||
| + | <code c argv.c> | ||
| + | #include < | ||
| + | |||
| + | int main (int argc, char **argv, char **envp) | ||
| + | { | ||
| + | int i ; | ||
| + | |||
| + | printf (" | ||
| + | |||
| + | for (i = 0; i < argc; i++) | ||
| + | printf (" | ||
| + | |||
| + | 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 argumentos: 6 | ||
| + | argv[0]: ./argv | ||
| + | argv[1]: teste | ||
| + | argv[2]: 1 | ||
| + | argv[3]: 2 | ||
| + | argv[4]: 3 | ||
| + | argv[5]: --help | ||
| + | |||
| + | ===== Funções específicas ===== | ||
| + | |||
| + | Para ler e tratar mais facilmente as opções da linha de comando informadas por // | ||
| + | |||
| + | Eis um exemplo de uso da função '' | ||
| + | |||
| + | <code c options.c> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | int main (int argc, char **argv) | ||
| + | { | ||
| + | int flag_a = 0; | ||
| + | int flag_b = 0; | ||
| + | char *value_c = NULL; | ||
| + | int option; | ||
| + | |||
| + | opterr = 0; | ||
| + | |||
| + | // options: | ||
| + | while ((option = getopt (argc, argv, " | ||
| + | switch (option) | ||
| + | { | ||
| + | case ' | ||
| + | flag_a = 1; | ||
| + | break; | ||
| + | case ' | ||
| + | flag_b = 1; | ||
| + | break; | ||
| + | case ' | ||
| + | value_c = optarg; | ||
| + | break; | ||
| + | | ||
| + | fprintf (stderr, " | ||
| + | exit (1) ; | ||
| + | } | ||
| + | |||
| + | printf (" | ||
| + | flag_a, flag_b, value_c); | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Status de saída ===== | ||
| + | |||
| + | Outro canal de interação importante entre o programa C e o sistema operacional é o valor de retorno da função '' | ||
| + | |||
| + | <code c retval.c> | ||
| + | #include < | ||
| + | |||
| + | int main (int argc, char **argv, char **envp) | ||
| + | { | ||
| + | return (14) ; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | O //status// de saída de um processo pode ser consultado no terminal UNIX (shell Bash) através da variavel '' | ||
| + | |||
| + | < | ||
| + | $ gcc retval.c -o retval -Wall | ||
| + | $ ./retval | ||
| + | $ echo $? | ||
| + | 14 | ||
| + | </ | ||
| + | |||
| + | O status de saída também pode ser usado em scripts do shell: | ||
| + | |||
| + | <code sh testa-retorno.sh> | ||
| + | #!/bin/sh | ||
| + | |||
| + | if retval | ||
| + | then | ||
| + | # exit status is zero | ||
| + | echo " | ||
| + | else | ||
| + | # exit status is NOT zero | ||
| + | echo " | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | ===== Exercícios ===== | ||
| + | |||
| + | - Escrever um programa que recebe uma lista de parâmetros na linha de comando. Ele não escreve nada na saída, mas devolve como //status// de saída o número de parâmetros que iniciam com o caractere "'' | ||
| + | - Escrever um programa '' | ||
| + | - Escrever um programa para listar as variáveis de ambiente recebidas pelo programa (parâmetro '' | ||