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 |


⬅️ Voltar ao Sumário da Especialização