argv[0] 始终是可执行文件名称,还是仅仅是约定?
向 C 中的 main() 函数提供参数时或者 C 应用程序,就会出现问题:argv[0] 是否总是代表可执行文件的名称?或者这只是一个广泛的约定,不能保证普遍适用性?
深入研究标准
为了确定 argv[0} 的真实性质,我们必须查阅相关标准。 ISO C11 明确规定,当 argc 超过零时,“argv[0] 代表程序名称”。然而,它重要地补充说,“如果程序名称在主机环境中不可用,则 argv[0][0] 应为空字符。”
此澄清表明 argv[0] 仅体现程序名称(如果可以从主机环境轻松获得)。此外,该标准强调 argv 中包含的值完全是实现定义的,受主机环境的影响。
程序名称的含义
因此,如果主机环境无法提供程序名称,则程序名称可能为空,或者如果可访问,则程序名称可以采用任意形式。理论上,主机环境甚至可以选择提供一个乱码的程序名称来娱乐!
注意事项
但是,必须注意“实现定义的” “在 ISO 标准中具有独特的含义。实施者有义务详细记录其具体行为。因此,即使像 UNIX 这样因通过 exec 系列命令灵活地用任意内容填充 argv[0] 而臭名昭著的平台,也必须正式记录他们的做法。
以上是`argv[0]` 总是 C/C 中的可执行文件名称吗?的详细内容。更多信息请关注PHP中文网其他相关文章!