本期详解main函数参数的”真面目“以及这些参数发挥的重要作用是什么,它们与Linux下命令选项功能的实现又有上面密切关系?

目录

一、main函数可以有参数吗?

二、argc与argv[]的真面目

三、main函数参数的实际意义

四、argv[argc] == NULL

五、总结


一、main函数可以有参数吗?

先说结论,main函数不仅仅有参数,而且作用相当大。在学习C语言的过程当中,相信大家都见过甚至用过main函数的参数,我写一个最简单的代码给大家展示:

这是一个最简易的C语言代码,是完全可以运行且不会报错的。

但是我们会有一个疑问,这两个参数到底是什么意思,有什么用?

二、argc与argv[]的真面目

argc:arg count; argv:arg vector

char *argv[]中保存的每个元素都是一个字符串,而argc则表示拥有的字符串的个数。那么这个argc与字符串究竟是谁传过来的呢?我们可以把这些参数和字符串都给打印出来,看看它们的庐山真面目是怎样的:

我们将通过这一段代码来演示,运行结果如下:

我们可以惊奇地发现,我们输入指令./code运行这段代码,结果它把我的指令当作字符串输出了!初见端倪,我们继续观察规律:

至此,我们可以得出结论,我输入的指令有多少个字符串(字符串之间默认用空格隔开),argc就是多少,而输出的这些字符串,也正是我输入的指令!

三、main函数参数的实际意义

到目前为止我们很快便摸清了argc与argv[]到底是怎么来的,可是它们存在的意义到底是啥?究竟有什么用呢?接下来我会先写一段莫名其妙的代码,大家先不着急搞懂我写的代码是啥,一会大家绝对能顿悟这些参数的意义何在:

代码中严格规定argc == 2才执行后面的代码,否则直接结束,我们执行来看看:

虽然我们没有写特定指令对应的功能是什么,但是从这里我们就能知道,我们可以规定一个指令由几个字符串组成(上面例子规定两个),而第一个字符串argv[0]是固定的(上面是./code),第二个字符串则决定了不同字符串与./code的不同组合可以实现不一样的功能效果!!!我们以Linux下的一个具体指令来给大家看看:

是不是ls后面跟了不同的字符,得到了不同组合的指令,而这些指令执行之后也得到了各自相应不同的结果,代表不同的功能,其原理与我上面写的代码基本相同,Linux下绝大部分指令都是由C语言编写而成,而这些指令能根据不同组合实现不同的功能,归根结底是因为使用了main函数的参数!因此在前面才说main函数的参数相当重要!!!

结论:回答刚才的问题,为什么要有命令行参数?命令行参数的本质应用,是为了实现一个命令,可以根据不同的选项,实现不同的子功能!也是Linux中所有命令选项功能的实现方式!!!

四、argv[argc] == NULL

argv当中有argc个元素,其中argv[argc - 1]是最后一个元素,再往后,argv[argc - 1]就为空(NULL),我们可以通过下面代码来执行验证一下:

结论证明成立。

五、总结

这里总结三个小细节:

1.命令行参数,至少是1,即argc  >= 1,argv[0]一定会有元素,指向的就是程序名!

2.选项,是以空格分隔的字符串,一个字符也是字符串!

3.有argc个字符串,argv[argc - 1]是最后一个字符串,而argv[argc] == NULL

本期讲解到此结束,感谢大家观看学习,后续将会持续更新系列内容~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐