在C语言中解析程序参数时,什么是好的做法

在C语言中解析程序参数时,什么是好的做法,c,parsing,parameters,C,Parsing,Parameters,我正在解析传递给程序的参数。我想: 如果没有参数,则不执行任何特殊操作 如果只有-k作为参数传递,则将标志设置为1 如果存在与-k 下面的代码正确吗?是否能够提高其满足标准和良好实践指南的能力 int flag = FALSE; if (argc == 2 && strcmp(argv[1], "-k") == 0) flag = TRUE; else if (argc >= 2) ignore(); 以下程序显示了如何使用getopt: #

我正在解析传递给程序的参数。我想:

  • 如果没有参数,则不执行任何特殊操作

  • 如果只有
    -k
    作为参数传递,则将
    标志设置为1

  • 如果存在与
    -k


  • 下面的代码正确吗?是否能够提高其满足标准和良好实践指南的能力

      int flag = FALSE;
      if (argc == 2 && strcmp(argv[1], "-k") == 0)
        flag = TRUE;
      else if (argc >= 2)
        ignore();
    

    以下程序显示了如何使用getopt:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #define TRUE 1
    #define FALSE 0
    
    void ignore() {
      printf("Ignore\n");
    }
    
    int main(int argc, char **argv) {
      if(argc <= 1) {
        printf("Do nothing\n");
        return 0;
      } else if(argc > 2) {
        ignore();
      } else {
        int c, flag;
        flag = FALSE;
        while((c = getopt (argc, argv, ":k")) != -1) {
          switch(c) {
          case 'k':
        flag = TRUE;
        break;
          default:
        ignore();
        break;
          }
        }
        printf("Flag = %d\n",flag);
        return 0;
      }
    }
    
    #包括
    #包括
    #包括
    #定义真1
    #定义FALSE 0
    无效忽略(){
    printf(“忽略\n”);
    }
    int main(int argc,字符**argv){
    如果(argc2){
    忽略();
    }否则{
    INTC,旗帜;
    flag=FALSE;
    而((c=getopt(argc,argv,“:k”)!=-1){
    开关(c){
    案例“k”:
    flag=TRUE;
    打破
    违约:
    忽略();
    打破
    }
    }
    printf(“标志=%d\n”,标志);
    返回0;
    }
    }
    
    删除宏,它们没有用处。考虑有一个参数时的情况,但不是<代码> -k>代码>。你的代码做得对吗?
    getopt
    是在类UNIX系统中执行此操作的标准方法。无论你做什么,我强烈建议不要解析
    main
    中的参数。不要发明你自己的布尔值,C自1999年以来就有一个布尔值。这篇文章更适合网站
    getopt
    不在标准C库中,但是POSIX也有。