当在C或C++应用程序中传递参数为main()
时,argv[0]
会始终是可执行文件的名称吗?或者这只是一个常见的惯例,并不能保证main()
%都是真的?
当在C或C++应用程序中传递参数为main()
时,argv[0]
会始终是可执行文件的名称吗?或者这只是一个常见的惯例,并不能保证main()
%都是真的?
猜测(甚至是经过教育的猜测)很有趣,但您确实需要查看标准文档才能确定.例如,ISO C11规定(我的重点):
如果
argc
的值大于零,则argv[0]
represents指向的字符串为程序名;如果主机环境无法提供程序名,则argv[0][0]
应为空字符.
所以不,如果程序名是available.,它只是程序名,它是"represents"程序名,不一定是is程序名.之前的章节说明:
如果
argc
的值大于零,则数组成员argv[0]
到argv[argc-1]
(含)应包含指向字符串的指针,这些字符串在程序启动之前由主机环境给定实现定义的值.
这与以前的标准C99没有什么不同,这意味着即使是这values个也不受该标准的规定--它完全取决于实现.
这意味着,如果主机环境doesn't提供程序名,则该程序名可以为空;如果主机环境does提供其他任何内容,则该程序名可以为空,前提是"其他任何内容"以某种方式表示该程序名.在我更具虐待狂的时刻,我会考虑把它转换成斯瓦希里语,通过替换密码运行它,然后将它存储在反向字节顺序:-).
然而,实现定义的does在ISO标准中具有特定的含义-实现必须记录其如何工作.因此,即使是UNIX(它可以使用exec
系列调用将其喜欢的任何内容放入argv[0]
),也必须(并且确实)对其进行记录.