C Academy · Lektion

Byg et CLI-værktøj

Praktisk eksempel

Lektion 4 af 413 trin

Byg et CLI-værktøj er en gratis C Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C Academy-kurset indeholder 4 lektioner i alt.

Sæt det hele sammen

Nu kombinerer vi argumenter, optioner og fortolkning i et lille, men komplet CLI-værktøj.

Vores eksempel er et værktøj til talformatering, der læser en værdi og nogle få optioner og derefter udskriver et resultat.

#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;
}

Design af grænsefladen

Gode CLI-værktøjer definerer deres grænseflade på forhånd. Vores værktøj accepterer:

  • -v udførligt output
  • -r N gentag outputtet N gange
  • ét positionelt argument: den tekst, der skal udskrives
#include <stdio.h>

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

Deklaration af indstillinger

Gem hver konfigurerbare funktion i en variabel med en fornuftig standardværdi. Det holder fortolkningen adskilt fra det egentlige arbejde.

#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;
}

Fortolkning med getopt

Brug getopt til at udfylde flagene. -r tager en værdi, så den tilsvarende optstring-post er 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;
}

Læsning af det positionelle argument

Efter getopt peger optind på det første ikke-optionelle argument. Vi henter teksten derfra.

Hvis der ikke findes noget argument, udskriver vi brugsanvisningen og afslutter med en fejlkode.

#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;
}

Validering af numerisk input

Et robust værktøj kontrollerer, at -r modtog et fornuftigt tal. Afvis gentagelsesantal på nul eller derunder.

#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;
}

Udførelse af arbejdet

Når indstillingerne er fortolket og valideret, udfører du den egentlige opgave. Her udskriver vi teksten repeat gange.

#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;
}

Udførligt output

Det udførlige flag kan tilføje diagnostiske oplysninger. Beskyt sådanne udskrifter med flaget, så det normale output forbliver rent.

#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;
}

Det komplette værktøj

Her er hele programmet, der samler alle delene: fortolk, validér, og kør derefter.

#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;
}

Afslutningskoder er vigtige

CLI-værktøjer kommunikerer succes gennem deres afslutningskode. Returnér 0 ved succes og en værdi, der ikke er nul, ved fejl.

Scripts og andre programmer er afhængige af dette, når de skal beslutte, hvad der skal ske derefter.

#include <stdio.h>

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

Skriv fejl til stderr

Efter konvention går normalt output til stdout, og fejl går til stderr via fprintf(stderr, ...).

Det giver brugerne mulighed for at adskille resultater fra diagnostik, når output omdirigeres.

#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;
}

Hurtig kontrol

Test din forståelse af konventioner for CLI-værktøjer.

Opsummering

Du har bygget et komplet CLI-værktøj:

  • Definér grænsefladen, og deklarér indstillinger med standardværdier.
  • Fortolk flag med getopt; læs positionelle argumenter fra optind.
  • Validér input, før du udfører arbejdet.
  • Returnér meningsfulde afslutningskoder, og send fejl til stderr.
Gratis at komme i gang

Lær C med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
39
Lektioner
144

Ofte stillede spørgsmål

Er lektionen “Byg et CLI-værktøj” gratis?

Ja — hele teksten til “Byg et CLI-værktøj” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C Academy-kurset, skal du opgradere til CoddyKit PRO. C Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Byg et CLI-værktøj”?

Praktisk eksempel Du øver dig i C Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C Academy?

Der kræves ingen tidligere erfaring. C Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Byg et CLI-værktøj”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C Academy-lektion?

Ja. Alle C Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. argc og argv
  2. Parsing af valgmuligheder
  3. getopt
  4. Byg et CLI-værktøj
← Tilbage til C Academy