0Pricing
C Academy · บทเรียน

การสร้างเครื่องมือ CLI

ตัวอย่างการใช้งานจริง

การสร้างเครื่องมือ CLI เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

การนำทุกส่วนมาประกอบกัน

ตอนนี้เราจะรวมอาร์กิวเมนต์ ออปชัน และการแยกวิเคราะห์เข้าด้วยกันเป็นเครื่องมือ CLIขนาดเล็กแต่สมบูรณ์

ตัวอย่างของเราคือเครื่องมือจัดรูปแบบตัวเลข ซึ่งอ่านค่าและออปชันบางรายการ แล้วพิมพ์ผลลัพธ์ออกมา

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

การออกแบบส่วนติดต่อ

เครื่องมือ CLI ที่ดีจะกำหนดส่วนติดต่อไว้ล่วงหน้า เครื่องมือของเราจะรองรับ:

  • -v แสดงผลแบบละเอียด
  • -r N ทำซ้ำผลลัพธ์ N ครั้ง
  • อาร์กิวเมนต์ตามตำแหน่งหนึ่งรายการ: ข้อความที่จะพิมพ์
#include <stdio.h>

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

การประกาศการตั้งค่า

เก็บพฤติกรรมที่ปรับค่าได้แต่ละรายการไว้ในตัวแปรที่มีค่าเริ่มต้นเหมาะสม วิธีนี้ช่วยแยกการแยกวิเคราะห์ออกจากงานจริง

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

การแยกวิเคราะห์ด้วย getopt

ใช้ getopt เพื่อกำหนดค่าธง -r รับค่า ดังนั้นรายการของมันในออปต์สตริงคือ 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;
}

การอ่านอาร์กิวเมนต์ตามตำแหน่ง

หลังจาก getopt แล้ว optind จะชี้ไปยังอาร์กิวเมนต์ที่ไม่ใช่ออปชันตัวแรก เราจะดึงข้อความจากตำแหน่งนั้น

หากไม่มีอาร์กิวเมนต์ดังกล่าว เราจะพิมพ์วิธีใช้งานและจบการทำงานด้วยรหัสข้อผิดพลาด

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

การตรวจสอบข้อมูลเข้าตัวเลข

เครื่องมือที่รัดกุมจะตรวจสอบว่า -r ได้รับตัวเลขที่เหมาะสม ปฏิเสธจำนวนครั้งที่เป็นศูนย์หรือติดลบ

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

การทำงานจริง

เมื่อแยกวิเคราะห์และตรวจสอบการตั้งค่าแล้ว ให้ดำเนินงานจริง ในที่นี้เราจะพิมพ์ข้อความ repeat ครั้ง

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

ผลลัพธ์แบบละเอียด

ธงแบบละเอียดสามารถเพิ่มข้อมูลวินิจฉัยได้ ให้ครอบการพิมพ์ดังกล่าวไว้ภายใต้เงื่อนไขของธง เพื่อให้ผลลัพธ์ปกติยังคงสะอาด

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

เครื่องมือฉบับสมบูรณ์

ต่อไปนี้คือโปรแกรมฉบับเต็มที่เชื่อมทุกส่วนเข้าด้วยกัน: แยกวิเคราะห์ ตรวจสอบ แล้วจึงทำงาน

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

รหัสออกมีความสำคัญ

เครื่องมือ CLI สื่อสารความสำเร็จผ่านรหัสออก ให้คืนค่า 0 เมื่อสำเร็จ และคืนค่าที่ไม่ใช่ศูนย์เมื่อเกิดข้อผิดพลาด

สคริปต์และโปรแกรมอื่น ๆ อาศัยค่านี้เพื่อตัดสินใจว่าจะทำอะไรต่อ

#include <stdio.h>

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

การเขียนข้อผิดพลาดไปยัง stderr

ตามธรรมเนียม ผลลัพธ์ปกติจะไปที่ stdout และข้อผิดพลาดจะไปที่ stderr ผ่าน fprintf(stderr, ...)

วิธีนี้ทำให้ผู้ใช้แยกผลลัพธ์ออกจากข้อมูลวินิจฉัยได้เมื่อเปลี่ยนเส้นทางผลลัพธ์

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

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับธรรมเนียมของเครื่องมือ CLI

สรุปทบทวน

คุณได้สร้างเครื่องมือ CLI ที่สมบูรณ์:

  • กำหนดส่วนติดต่อ และประกาศการตั้งค่าพร้อมค่าเริ่มต้น
  • แยกวิเคราะห์ธงด้วย getopt และอ่านอาร์กิวเมนต์ตามตำแหน่งจาก optind
  • ตรวจสอบข้อมูลเข้าก่อนเริ่มทำงาน
  • คืนค่ารหัสออกที่มีความหมาย และส่งข้อผิดพลาดไปยัง stderr

คำถามที่พบบ่อย

บทเรียน “การสร้างเครื่องมือ CLI” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสร้างเครื่องมือ CLI” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสร้างเครื่องมือ CLI”

ตัวอย่างการใช้งานจริง คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสร้างเครื่องมือ CLI” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม

ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. argc และ argv
  2. การแยกวิเคราะห์ตัวเลือก
  3. getopt
  4. การสร้างเครื่องมือ CLI
← กลับไปที่ C Academy