在 C 或 C 中利用 main() 的功能时,出现了一个长期存在的问题:我们是否可以依靠 argv[0] 来揭示可执行文件的名称,或者它仅仅是一个缺乏通用性的约定适用性?
为了解开这个谜题,让我们深入研究标准化的历史。
согласно ISO C11,位于 argv[0] 的字符串,如果 argc 超过零,代表程序 姓名。然而,这种表述并不是绝对的。当程序名称在主机环境深处仍然难以捉摸时,argv[0][0] 会恢复为空字符。
不幸的是,标准强调了 argv[0]“代表”程序名称,留下不同表示的可能性。这种不确定性掩盖了其真实性。
为了进一步掩盖这个问题,该标准断言 argv[0] 到 argv[argc-1] 中的值会受到主机环境的突发奇想的影响,并且超出了标准的掌握范围。
这种神秘的立场赋予主机环境有权自行决定操纵 argv[0]。程序名称可能会消失,被空字符串取代,或者变成一个令人困惑的密码,这会让密码破译者不知所措。
尽管表面上存在无政府状态,ISO 标准确实强加了一个对这种混乱的秩序的衡量。实现定义,作为标准术语,要求实现提供文档来阐明它们对 argv[0] 的处理。即使在 UNIX 的狂野领域,exec 系列对 argv[0] 造成严重破坏,标准也强制记录此类偏差。
虽然 argv[0] 经常用作照明灯塔,揭示可执行文件的路径,其准确性和一致性仍然掌握在主机环境手中。为了确保argv[0]的准确性,查阅主机环境的文档成为不可或缺的工具。然而,argv[0] 作为最终程序名称的普遍有效性仍然是一个难以实现的梦想。
以上是我们可以始终相信 argv[0] 提供可执行文件的名称吗?的详细内容。更多信息请关注PHP中文网其他相关文章!