如何处理复杂C代码中的多个参数选项

如何处理复杂C代码中的多个参数选项,c,C,我必须用C写一个程序,当它启动时,在命令行上有几个选项。我想知道如何处理大量可能的选择。我的意思是,我已经找到了如何用argp或getopt解析它们。 现在我必须处理他们。例如,有一个经典选项--verbose |-v。如何使我的程序“冗长”?我是否每次都要写类似“if(verbosefag)printf(“…””)”?我认为当有很多争论时,这种方法可能是肮脏的。那么,可能的方法是什么呢?有很多可能性。这里有一个。您可以使用定义接口的结构 typedef struct { void* met

我必须用C写一个程序,当它启动时,在命令行上有几个选项。我想知道如何处理大量可能的选择。我的意思是,我已经找到了如何用argp或getopt解析它们。
现在我必须处理他们。例如,有一个经典选项--verbose |-v。如何使我的程序“冗长”?我是否每次都要写类似“if(verbosefag)printf(“…””)”?我认为当有很多争论时,这种方法可能是肮脏的。那么,可能的方法是什么呢?

有很多可能性。这里有一个。您可以使用定义接口的结构

typedef struct {
  void* method1(void);
  void* method2(void);
  void* method3(void);
} interface;
根据从命令行传递到main()的选项,可以使用不同的方法初始化此接口

  interface *i;
  switch (option) {
  case VERBOSE: i->method1=verbose_m1; i->method2=verbose_m2; ...a.s.o.
  break;
  case DEBUG: i->method1=debug_m1; i->method2=debug_m2; ...a.s.o.
  break;
  default: i->method1=m1; i->method2=m2; i->method3=m3;
  }
然后编写一个代码,在其中调用
i->method1


还有更优雅的方法,使用uml或类型类等。这些优雅的方法将生成低级代码,在您这方面,您可以用简单的语言定义接口等。要查看这种语言的外观,本着这种精神,这是一种非常简单的语言。

我是否每次都要写类似的东西。或者将其包装在函数中,例如,
void myprintf(const char*fmt,…){if(verbosefag){…vprintf(fmt,va);}}
或宏
#define myprintf(…)do{if(verboseFlat){printf(u va_uargs_u)}}而(0)
。这就是它的工作原理。卡米尔库克取决于他想做什么。如果他生成了一个大数据结构,并且根据传递给
main
的选项,他决定是将数据结构发送到调试还是以其他方式打印,还是将其发送到下一个处理级别,那么使用接口就更容易了,正如我指定的那样。我不知道他想做什么。也许他会提供详细信息。有时你只需要走很长的路,编写一个完整的选项解析器,就像我在《镜中世界》中所做的那样,请参见这里的示例: