0Pricing
C Academy · Aula

Criando uma ferramenta CLI

Exemplo prático.

Criando uma ferramenta CLI é uma aula grátis de C Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Juntando tudo

Agora vamos combinar argumentos, opções e análise em uma pequena, mas completa, ferramenta de CLI.

Nosso exemplo é um utilitário de formatação numérica que lê um valor e algumas opções e, então, imprime um resultado.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <number>\n", argv[0]);
        return 1;
    }
    printf("You passed: %s\n", argv[1]);
    return 0;
}

Projetando a interface

Boas ferramentas de CLI definem sua interface antecipadamente. A nossa aceitará:

  • -v saída detalhada
  • -r N repetir a saída N vezes
  • um argumento posicional: o texto a ser impresso
#include <stdio.h>

int main(void) {
    printf("Interface: prog [-v] [-r N] <text>\n");
    return 0;
}

Declarando configurações

Mantenha cada comportamento configurável em uma variável com um valor padrão adequado. Isso mantém a análise separada do trabalho propriamente dito.

#include <stdio.h>

int main(void) {
    int verbose = 0;
    int repeat = 1;
    const char *text = NULL;
    printf("defaults: verbose=%d repeat=%d\n", verbose, repeat);
    return 0;
}

Analisando com getopt

Use getopt para preencher os sinalizadores. -r recebe um valor, portanto sua entrada na cadeia de opções é r:.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int verbose = 0, repeat = 1, opt;
    while ((opt = getopt(argc, argv, "vr:")) != -1) {
        if (opt == 'v') verbose = 1;
        else if (opt == 'r') repeat = atoi(optarg);
    }
    printf("verbose=%d repeat=%d\n", verbose, repeat);
    return 0;
}

Lendo o argumento posicional

Depois de getopt, optind aponta para o primeiro argumento que não é uma opção. Obtemos o texto a partir dele.

Se nenhum estiver presente, imprimimos as instruções de uso e saímos com um código de erro.

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    while (getopt(argc, argv, "vr:") != -1) { }
    if (optind >= argc) {
        printf("Error: missing text argument\n");
        return 1;
    }
    printf("text = %s\n", argv[optind]);
    return 0;
}

Validando a entrada numérica

Uma ferramenta robusta verifica se -r recebeu um número adequado. Rejeite quantidades de repetição zero ou negativas.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int repeat = 1, opt;
    while ((opt = getopt(argc, argv, "r:")) != -1) {
        if (opt == 'r') repeat = atoi(optarg);
    }
    if (repeat < 1) {
        printf("Error: repeat must be >= 1\n");
        return 1;
    }
    printf("repeat = %d\n", repeat);
    return 0;
}

Executando o trabalho

Com as configurações analisadas e validadas, execute a tarefa propriamente dita. Aqui, imprimimos o texto repeat vezes.

#include <stdio.h>

int main(void) {
    const char *text = "hello";
    int repeat = 3;
    for (int i = 0; i < repeat; i++) {
        printf("%s\n", text);
    }
    return 0;
}

Saída detalhada

O sinalizador de modo detalhado pode adicionar informações de diagnóstico. Condicione essas impressões ao sinalizador para manter a saída normal limpa.

#include <stdio.h>

int main(void) {
    int verbose = 1;
    const char *text = "hi";
    if (verbose) printf("[debug] about to print text\n");
    printf("%s\n", text);
    return 0;
}

A ferramenta completa

Aqui está o programa completo, reunindo todas as partes: analisar, validar e então executar.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int verbose = 0, repeat = 1, opt;
    while ((opt = getopt(argc, argv, "vr:")) != -1) {
        if (opt == 'v') verbose = 1;
        else if (opt == 'r') repeat = atoi(optarg);
    }
    if (optind >= argc) { printf("Usage: prog [-v] [-r N] <text>\n"); return 1; }
    const char *text = argv[optind];
    if (verbose) printf("[debug] repeat=%d\n", repeat);
    for (int i = 0; i < repeat; i++) printf("%s\n", text);
    return 0;
}

Os códigos de saída são importantes

As ferramentas de CLI comunicam o sucesso por meio do código de saída. Retorne 0 em caso de sucesso e um valor diferente de zero em caso de erros.

Scripts e outros programas dependem disso para decidir o que fazer em seguida.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("failure\n");
        return 2;
    }
    printf("success\n");
    return 0;
}

Escrevendo erros em stderr

Por convenção, a saída normal vai para stdout e os erros vão para stderr por meio de fprintf(stderr, ...).

Isso permite separar os resultados das informações de diagnóstico ao redirecionar a saída.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        fprintf(stderr, "Error: need an argument\n");
        return 1;
    }
    printf("%s\n", argv[1]);
    return 0;
}

Verificação rápida

Teste sua compreensão das convenções de ferramentas de CLI.

Recapitulação

Você criou uma ferramenta de CLI completa:

  • Defina a interface e declare as configurações com valores padrão.
  • Analise os sinalizadores com getopt; leia os argumentos posicionais a partir de optind.
  • Valide as entradas antes de executar o trabalho.
  • Retorne códigos de saída significativos e envie os erros para stderr.

Perguntas Frequentes

A aula “Criando uma ferramenta CLI” é grátis?

Sim — o texto completo de “Criando uma ferramenta CLI” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Criando uma ferramenta CLI”?

Exemplo prático. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Criando uma ferramenta CLI”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. argc e argv
  2. Analisando opções
  3. getopt
  4. Criando uma ferramenta CLI
← Voltar para C Academy