getopt() function in C to parse command line arguments

The getopt() function is a builtin function in C and is used to parse command line arguments.


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

optstring is simply  a list of characters, 
each representing a single character option.

Return Value: The getopt() function returns different values:

  • If the option takes a value, that value is pointer to the external variable optarg.
  • ‘-1’ if there are no more options to process.
  • ‘?’ when there is an unrecognized option and it stores into external variable optopt.
  • If an option requires a value (such as -f in our example) and no value is given, getopt normally returns ?.
    By placing a colon as the first character of the options string, getopt returns: instead of ? when no value is given.

Generally, the getopt() function is called from inside of a loop’s conditional statement. The loop terminates when the getopt() function returns -1. A switch statement is then executed with the value returned by getopt() function.

A second loop is used to process the remaining extra arguments that cannot be processed in the first loop.

Below program illustrate the getopt() function in C:





// Program to illustrate the getopt()
// function in C
#include <stdio.h> 
#include <unistd.h> 
int main(int argc, char *argv[]) 
    int opt;
    // put ':' in the starting of the
    // string so that program can 
    //distinguish between '?' and ':' 
    while((opt = getopt(argc, argv, “:if:lrx”)) != -1) 
            case ‘i’: 
            case ‘l’: 
            case ‘r’: 
                printf(“option: %c\n”, opt); 
            case ‘f’: 
                printf(“filename: %s\n”, optarg); 
            case ‘:’: 
                printf(“option needs a value\n”); 
            case ‘?’: 
                printf(“unknown option: %c\n”, optopt);
    // optind is for the extra arguments
    // which are not parsed
    for(; optind < argc; optind++){     
        printf(“extra arguments: %s\n”, argv[optind]); 
    return 0;



Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

A polyglot and a Big Data enthusiast

If you like GeeksforGeeks and would like to contribute, you can also write an article using or mail your article to See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :


Please write to us at to report any issue with the above content.