💻 Exemplos de Código: Cap 08 - Modularização, Funções e argc/argv
Código executável completo demonstrando protótipos de funções, semântica de passagem por valor, variáveis persistentes static e processamento de parâmetros de terminal com argc/argv.
📄 Exemplo 1: Passagem por Valor e Persistência com static (funcoes_demo.c)
#include <stdio.h>
#include <stdint.h>
// 1. Protótipos de Funções
void demonstrarPassagemPorValor(int copiaValor);
uint32_t gerarProximoIdTransacao(void);
int main(void) {
printf("====================================================\n");
printf(" 🧩 MODULARIZACAO E ESCOPO DE VARIAVEIS EM C\n");
printf("====================================================\n");
// 1. Demonstração de Passagem por Valor
int numeroOriginal = 50;
printf("Valor em main ANTES: %d\n", numeroOriginal);
demonstrarPassagemPorValor(numeroOriginal);
printf("Valor em main DEPOIS: %d (Inalterado!)\n", numeroOriginal);
printf("----------------------------------------------------\n");
printf(" 🏷️ GERADOR DE IDS COM VARIAVEL STATIC PERSISTENTE\n");
printf("----------------------------------------------------\n");
printf(" Transacao 1: #%06u\n", gerarProximoIdTransacao());
printf(" Transacao 2: #%06u\n", gerarProximoIdTransacao());
printf(" Transacao 3: #%06u\n", gerarProximoIdTransacao());
printf("====================================================\n");
return 0;
}
// Implementação: Cópia isolada no Stack Frame
void demonstrarPassagemPorValor(int copiaValor) {
copiaValor = copiaValor * 2;
printf(" [Dentro da funcao]: %d\n", copiaValor);
}
// Implementação: Variável static na seção .data
uint32_t gerarProximoIdTransacao(void) {
static uint32_t sequencialId = 1000;
return sequencialId++;
}
📄 Exemplo 2: Calculadora CLI com argc e argv (calc_cli.c)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc != 4) {
fprintf(stderr, "Uso incorreto!\n");
fprintf(stderr, "Sintaxe: %s <numero1> <operador: + - x /> <numero2>\n", argv[0]);
fprintf(stderr, "Exemplo: %s 10 + 25\n", argv[0]);
return EXIT_FAILURE;
}
double n1 = atof(argv[1]);
char op = argv[2][0];
double n2 = atof(argv[3]);
double resultado = 0.0;
switch (op) {
case '+': resultado = n1 + n2; break;
case '-': resultado = n1 - n2; break;
case 'x':
case '*': resultado = n1 * n2; break;
case '/':
if (n2 == 0.0) {
fprintf(stderr, "[ERRO]: Divisao por zero!\n");
return EXIT_FAILURE;
}
resultado = n1 / n2;
break;
default:
fprintf(stderr, "[ERRO]: Operador invalido '%c'!\n", op);
return EXIT_FAILURE;
}
printf(">> Resultado: %.2lf %c %.2lf = %.2lf\n", n1, op, n2, resultado);
return EXIT_SUCCESS;
}
🧭 Navegação Rápida
| 📖 Teoria | 📊 Slides | 🧠 Quiz | 💻 Exemplos | 🧩 Exercícios | | :— | :— | :— | :— | :— | | Ler Teoria | Ver Slides | Fazer Quiz | Ver Exemplos | Praticar Exercícios |