在我刚读大学那会,其他专业的同学都会去考计算机二级,有次一位其他专业的同学向我求教“main函数的argc和argv我们用不到呀,这俩参数是啥意思呢?” 问的我一愣,我们老师也没有教呀,而且书本上好像也没有。通过字面意思我只能告诉他argv是参数数组,argc是参数个数,具体有啥用我也说不上来。实际上我的回答是经不起进一步追问的,argc是argv的长度吗?如果是这样的话,那么既然有了参数数组了,为毛要多传一个参数个数?
实际上,argc和argv是命令行传递给main函数的参数,其中:
argv是一个包含多个字符串的数组,其中包含执行文件名和所附带的参数。argv[0]是可执行文件地址(在iOS中它就是.app的文件地址)。
argc是argv的长度,也就是参数个数+1。
既然是这样,那为什么还“多此一举”地传个argc呢?主要是因为C99标准规定了这么做,而且传递一个argc可以方便提高后续流程效率(O(1)和O(n)的时间复杂度)。
在我们iOS中,正常程序运行起来,argc是1,argv[0]是我们.app文件路径。我们怎么验证多参数的场景呢?我们可以通过终端命令 xcrun simctl 来启动我们的app并加上参数即可,比如我这里执行:
xcrun simctl launch D3ED4FE2-9821-4CE4-93FA-85B57BFC53B3 com.github.ApesTalk.AskMoreOC I love iOS
顺带复习下 xcrun simctl 安装和运行APP指令:
程序中提前写好把参数打印出来的代码逻辑,看到如下结果: