3 回答
TA贡献2065条经验 获得超13个赞
猜测(即使是有教育意义的猜测)很有趣,但你确实需要去标准文件。例如,ISO C11陈述(我的重点):
如果值
argc
大于零,则指向的字符串argv[0]
表示程序名称;argv[0][0]
如果程序名不能从主机环境获得,则应为空字符。
所以不,如果该名称可用,它只是程序名称。它“代表”程序名称,不一定是程序名称。之前的部分说明:
如果值
argc
大于零,则argv[0]
通过argv[argc-1]
包含的数组成员应包含指向字符串的指针,这些指针在程序启动之前由主机环境给出实现定义的值。
这与之前的标准C99相同,并且意味着即使这些值也不是由标准决定的 - 它完全取决于实现。
这意味着,节目名称可以是空的,如果主机环境不如果主机环境提供它,别的不提供的,规定“任何东西”在某种程度上代表了程序名称。在我更悲惨的时刻,我会考虑将其翻译成斯瓦希里语,通过替换密码运行它,然后以反向字节顺序存储它:-)。
但是,实现定义确实在ISO标准中具有特定含义 - 实现必须记录其工作原理。因此,即使UNIX,它可以把任何东西它喜欢到argv[0]
与exec
家人通话的,有(并执行)文件就可以了。
TA贡献1719条经验 获得超6个赞
在*nix
具有exec*()
呼叫的类型系统下,argv[0]
将是呼叫者在呼叫中放入的任何argv0
地方exec*()
。
shell使用这是程序名称的约定,并且大多数其他程序遵循相同的约定,因此argv[0]
通常是程序名称。
但是一个流氓Unix程序可以调用exec()
并制作argv[0]
任何它喜欢的东西,所以无论C标准说什么,你都不能指望这个100%的时间。
TA贡献1829条经验 获得超13个赞
根据C ++标准,第3.6.1节:
argv [0]应该是指向NTMBS的初始字符的指针,该NTMBS表示用于调用程序的名称或“”
所以不,至少在标准方面,它无法得到保证。
- 3 回答
- 0 关注
- 434 浏览
添加回答
举报