程序的参数格式有标准吗?

3
int main(int argc, char **argv)
{}
  1. 参数个数 argc 可能等于 0 吗?

  2. argv[0] 必须是可执行文件的名称吗?

  3. 这些问题是否有标准规定?


2
相关信息都在这个回答中:C和C++中main()函数应该返回什么? - Jonathan Leffler
2个回答

6
  1. 是的。

  2. 通常是的,也可能为空,或者是一些其他的标识字符串,甚至是NULL(见我的补充说明)。还可以从程序内部更改argv[0]为其他内容。

  3. C(和C ++)规范。

你还错过了一个:在argv中的最后一个元素始终为NULL,这意味着argv [argc]始终为NULL


在C11规范中,它在§5.1.2.2.1程序启动中。

在C++11规范中,它是§3.6.1主函数。


3
不;如果无法确定可执行文件名称,则argv [0]可能是一个指向空字符串的指针。话虽如此,这更多是理论上的陈述,不太实际。 - Jonathan Leffler
1
在重新阅读重复引用的标准时,argc 在 C 和 C++ 中都允许为零;我忘记了这个细节。 - Jonathan Leffler
@JonathanLeffler 我之前正要更新我的回答,但是后来得去开会了。不过现在已经更新了。 :) - Some programmer dude

1
  1. 是的
  2. 不需要存在Argv[0],但如果存在,则是程序名称,可以获取。
  3. 我猜这在C、Cpp中是标准的。@JonathanLeffler链接了一个很好的答案。

去查看重复问题中标准的规定。我忘记了 argc == 0 的可能性,但是标准(包括 C 和 C++)明确允许它。假设 argc > 0,则 argv[0] 的值可能是空字符串而不是程序名称——但仅当在特定平台上无法确定程序名称时才会出现这种情况。在托管环境中,这很少是一个实际问题。 - Jonathan Leffler
谢谢,这对我来说真的很惊讶。你终身学习 :P - MKK
这也让我感到惊讶。就像我说的那样,我已经忘记了,直到我再次阅读... - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接