getopt()函数:添加argv的目的

getopt() function: purpose of addition of argv

code piece from book

我正在阅读一本书中的 getopt() 函数,并尝试编写一个接受命令行参数的程序。但是optindargv的目的是什么,如何给指针数组加一个整数呢?完整代码:

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

int main(int argc, char *argv[]){
    char *delivery = "";
    int thick = 0;
    int count = 0;
    char ch;
    
    while((ch = getopt(argc, argv, "td:")) != EOF)
        printf("%i\n", ch);
        switch(ch){
            case 'd':
                delivery = optarg;
                break;
            case 't':
                thick = 1;
                break;
            default:
                fprintf(stderr, "Unknown option: '%s'\n", optarg);
                return 1;
    argc -= optind;
    argv += optind;
    
    if(thick)
        puts("Thick crust.");
        
    if(delivery[0])
        printf("To be delivered %s.\n", delivery);
        
    puts("Ingredients:");
    
    for(count = 0 ; count < argc ; ++count)
        puts(argv[count]);
    return 0;
}

optind 是命令行管理的下一个参数的索引。换句话说,它是迄今为止管理的参数数量。将optind添加到argv的目的是使其指向命令行上已管理选项后面可能剩余的参数。因此,这些附加参数将在 argv[0]、argv[1]... 到 argv[argc - 1] 中,因为 argc已通过 optind.

递减

以下循环在命令行上显示这些附加参数:

for(count = 0 ; count < argc ; ++count)
        puts(argv[count]);

如果您不将 optind 添加到 argv 并且不减少 argc有了它,之前的循环将是:

for(count = optind ; count < argc ; ++count)
        puts(argv[count]);

N.B.: 因为 argvchar * 上的指针,向其添加一些值,例如 optind 使其增加 "optind x sizeof(char *)"