首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言中命令行参数的有关问题

2012-02-05 
C语言中命令行参数的问题类似gcc这样的程序在运行使用时可以使用很多命令行参数如gcc -shared -fPIC xxx.s

C语言中命令行参数的问题
类似gcc这样的程序在运行使用时可以使用很多命令行参数如gcc -shared -fPIC xxx.so xxx.c
我想知道在程序内部是如何辨别如此多的参数的?
我知道main中可以通过argv[]得到命令,但是当可选的命令很多时用if去判断效率不高,用switch判断还不支持对字符串的判断。。用switch判断枚举类型倒是可以实现但是枚举常量明明规则不允许使用“-”等符号,那像gcc那样的“-shared”这样的字符串是怎么判断的?
我说的可能不但明白。。就是一下代码如何实现比较好?
int main(int argc,char * argv[])
{
  enum arg{help=1,name=2}argxx;<=============这里最理想的形式是“-help和-name”
  argxx=(enum arg)argv[1];
  switch(argxx)
  {
  case 1: help();break
  case 2: login(argv[2]);break;
  default: printf("=====>ERROR!!<======");
  }
}


[解决办法]
gcc怎么实现的没了解过,不过gcc也是开源的,有机会看源代码的,一般linux下是用上面的函数来获取的,省得自己花大力气解析,还要区分长短格式等~
[解决办法]
去看看《linux程序设计》

linux下有个专门解析参数的函数,--长参数,-短参数,都能直接解析
[解决办法]
我写了一个完整的解析函数,请参考:
void Application::parse_cmdline(int argc, char *argv[])
{
while(1) {
int longopt_id = 0;
int optchar;
static struct option long_opts[] = {

{ "help", 0, 0, 'h' },
{ "version", 0, 0, 'v' },
{ "daemon", 0, 0, 'd' },
{ "config", 1, 0, 'c' },

{ NULL, 0, 0, 0 }
};

optchar = getopt_long(argc, argv, "hvdc:", long_opts, &longopt_id);

if(optchar == -1)
break;

switch(optchar) {
case 'v' :
output_version();
break;

case 'h' :
usage();
break;

case 'c' :
m_config_file = optarg;
break;

case 'd' :
m_daemon = true;
break;

default :
break;
}
}

return ;
}

[解决办法]
man getopt_long 有详细解释,还有例子
http://www.freebsd.org/cgi/man.cgi?query=getopt_long&apropos=0&sektion=0&manpath=Red+Hat+Linux%2Fi386+8.0&arch=default&format=html
[解决办法]
学习,getopt()

热点排行