Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน getopt() ใน C เพื่อแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่ง


getopt() เป็นหนึ่งในฟังก์ชัน C ในตัวที่ใช้สำหรับตัวเลือกบรรทัดคำสั่ง ไวยากรณ์ของฟังก์ชันนี้มีลักษณะดังนี้ −

getopt(int argc, char *const argv[], const char *optstring)

opstring คือรายชื่อตัวละคร แต่ละตัวเป็นตัวแทนของตัวเลือกอักขระตัวเดียว

ฟังก์ชันนี้ส่งกลับค่าจำนวนมาก เหล่านี้เป็นเหมือนด้านล่าง −

  • หากตัวเลือกใช้ค่า ค่านั้นจะถูกชี้โดย optarg
  • จะคืนค่า -1 เมื่อไม่มีตัวเลือกให้ดำเนินการอีกต่อไป
  • ส่งคืน '?' เพื่อแสดงว่านี่เป็นตัวเลือกที่ไม่รู้จัก โดยจะเก็บไว้เพื่อ optopt
  • บางครั้งตัวเลือกบางตัวก็ต้องการค่าบางอย่าง หากตัวเลือกนั้นมีอยู่แต่ไม่มีค่าอยู่ ก็จะคืนค่า '?' ด้วย เราสามารถใช้ ':' เป็นอักขระตัวแรกของ optstring ได้ ดังนั้นในช่วงเวลานั้น อักขระดังกล่าวจะคืนค่า ':' แทนที่จะเป็น '?' หากไม่มีค่าใดๆ ให้

ตัวอย่าง

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

main(int argc, char *argv[]) {
   int option;
   // put ':' at the starting of the string so compiler can distinguish between '?' and ':'
   while((option = getopt(argc, argv, ":if:lrx")) != -1){ //get option from the getopt() method
      switch(option){
         //For option i, r, l, print that these are options
         case 'i':
         case 'l':
         case 'r':
            printf("Given Option: %c\n", option);
            break;
         case 'f': //here f is used for some file name
            printf("Given File: %s\n", optarg);
            break;
         case ':':
            printf("option needs a value\n");
            break;
         case '?': //used for some unknown options
            printf("unknown option: %c\n", optopt);
            break;
      }
   }
   for(; optind < argc; optind++){ //when some extra arguments are passed
      printf("Given extra arguments: %s\n", argv[optind]);
   }
}

ผลลัพธ์

Given Option: i
Given File: test_file.c
Given Option: l
Given Option: r
Given extra arguments: hello