Capítulo 16: Argumentos de Linha de Comando ⌨️🕶️
Neste capítulo, vamos aprender a passar informações para o nosso programa diretamente no momento em que o executamos pelo terminal, usando argc e argv, com o tema Matrix!
📖 O que são argc e argv?
Até agora, a nossa função main estava vazia: int main(). Mas ela pode receber dois parâmetros:
int argc: Conta quantos argumentos foram passados (Argument Count).char *argv[]: Um vetor de strings que guarda os argumentos reais (Argument Vector).
O primeiro argumento (argv[0]) é sempre o nome do próprio programa!
📖 Exemplo Guiado: Codinome de Acesso
Vamos criar um programa que exige que você passe seu codinome ao executá-lo.
- Crie o arquivo
acesso_matrix.cna pastasrc/:
#include <stdio.h>
int main(int argc, char *argv[]) {
// Se argc for menor que 2, significa que o usuário não passou o codinome
if (argc < 2) {
printf("Erro: Voce deve passar seu codinome!\n");
printf("Uso: ./acesso_matrix SEU_NOME\n");
return 1;
}
printf("Bem-vindo de volta a Matrix, %s.\n", argv[1]);
printf("Total de argumentos passados: %d\n", argc);
return 0;
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Compile:
gcc acesso_matrix.c -o acesso_matrix - Execute passando o nome:
./acesso_matrix Neo
Resultado Esperado:
Bem-vindo de volta a Matrix, Neo.
Total de argumentos passados: 2📊 Ilustração Visual: Como os argumentos são guardados
Se você digitar ./acesso_matrix Neo, o vetor argv fica assim:
graph LR subgraph Vetor argv A["argv[0]: './acesso_matrix'"] B["argv[1]: 'Neo'"] end
🛠️ Prática Obrigatória 1: Somador via Terminal
Crie um programa chamado somador_terminal.c que receba dois números como argumentos na linha de comando (ex: ./somador_terminal 5 10) e exiba a soma deles. (Dica: os argumentos vêm como texto! Use a função atoi(argv[1]) da biblioteca stdlib.h para converter texto em número inteiro).
🔑 Gabarito de Código
Prática 1: somador_terminal.c
#include <stdio.h>
#include <stdlib.h> // Necessária para atoi
int main(int argc, char *argv[]) {
if (argc < 3) {
printf("Erro: Passe dois numeros!\n");
printf("Uso: %s num1 num2\n", argv[0]);
return 1;
}
// Convertendo strings para inteiros
int num1 = atoi(argv[1]);
int num2 = atoi(argv[2]);
int soma = num1 + num2;
printf("A soma de %d e %d e: %d\n", num1, num2, soma);
return 0;
}📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
(Siga o padrão estabelecido no Guia)