不只是 [C 语言] :请问各位大佬是如何处理 main 函数传入的参数的

2019-09-24 09:16:56 +08:00
 12tall

请问,如果传入 main 函数的参数较多,应该如何组合处理啊

/*
* demo.exe
* 使用:demo.exe -name 12tall -age 12 -boy -newbie
*/
int main(argc,char* argv[]){
  /*
  * 有一个思路:
  * 1. 参数分为两种:需要读取值的,例如 -name -age ;不需要读取值的,大胆称为 [状态参数] 吧,例如 -boy -newbie
  * 2. 一般需要传入值的参数都赋予默认值
  * 3.  [状态参数] 可以这样取值:-boy=01b、-girl=00b、-newbie=00b、-expert=10b ;这样就可以组成 00b~11b 四种状态  
  * 4. 然后对应着写 4 个状态处理的函数(参数就是需要取值的那些参数,例如 name、age ),放在一个存放函数指针数组里面,由状态参数组合成的最终值就是指向合适函数的索引
  */
}
3030 次点击
所在节点    程序员
23 条回复
momocraft
2019-09-24 09:22:21 +08:00
学习使用 getopt
12tall
2019-09-24 09:34:05 +08:00
@momocraft
我重点表述错了,请问在已经拿到参数的情况下,怎么可以比较好地根据各项参数确定下一步状态,而不要写很多层 if...else...
pkookp8
2019-09-24 09:46:29 +08:00
入参
设全局变量
主流程
if 某个全局变量
特殊流程
xpfd
2019-09-24 09:55:04 +08:00
写代码在保证功能的情况下 尽量写的简洁明了, 不用在意行数,反正计算机不费纸,考虑炫技的都是新手,写多了你就知道,当年自己挖的坑都得自己埋,写得太隐晦了还没注释,以后自己看都会骂自己蠢
guyeu
2019-09-24 10:11:01 +08:00
你这个解决方案挺好的呀
12tall
2019-09-24 10:11:10 +08:00
@pkookp8 @xpfd 但是 if...else...嵌套四五层的话,会眼花缭乱的啊~
richangfan
2019-09-24 10:20:47 +08:00
设置环境变量
12tall
2019-09-24 10:23:21 +08:00
@guyeu 谢谢,但还是感觉有点怪怪的,大概是因为没有验证过吧。犹豫就会败北~~~
12tall
2019-09-24 10:24:15 +08:00
@richangfan 能否详细介绍下,谢谢!
guyeu
2019-09-24 10:27:52 +08:00
@12tall #8 这种操作叫位掩码,并不是你的独创。。
shylockhg
2019-09-24 10:30:14 +08:00
写个结构体,写进结构体里
12tall
2019-09-24 10:34:09 +08:00
@guyeu 学习了,掩码,谢谢大佬!
richangfan
2019-09-24 10:47:11 +08:00
@12tall 《 UNIX 环境高级编程》这本操作系统入门书有写
guyeu
2019-09-24 10:52:36 +08:00
@12tall #12 位掩码,bitmask
imagecap
2019-09-24 10:58:17 +08:00
定义个参数的 class, 先用 getopt 把参数解析好,让后再根据执行的自己的逻辑代码。
class arguments
{
public:
bool parse( int argc, char* argv[]) {
// getop
}

public:
std::string name;
int age;
bool sex;
}



int main( int argc, char* argv[] )
{
arguments args;
if( !args.parse( argc, argv ) )
return -1;

if( args.age > 20 )
{
...
}
else
{

}


return 0;
}
12tall
2019-09-24 11:00:50 +08:00
@shylockhg @wayixia 谢谢啊!
skydev
2019-09-24 11:54:07 +08:00
用 args.hxx 吧,像 python 的 argsparse 一样。Github 搜一下
12tall
2019-09-24 12:33:05 +08:00
@skydev 谢谢啦
xpfd
2019-09-24 18:02:39 +08:00
@12tall 怎么会眼花缭乱? 一个 if 一种情况啊 多简洁明了
xpfd
2019-09-24 18:11:33 +08:00
你后面的这种写法只适用于 进来的参数都比较统一 变化不大的情况 处理函数的参数也都单一的情况,如果进来的参数五花八门 处理函数返回值 还有参数要求也不一样的情况就难受了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX