当我们没有实际传递时,为什么argc作为main的参数给出?

时间:2017-09-07 14:35:45

标签: c

当我们实际上没有传递参数计数时,为什么argc作为C中的参数(即int main(int argc, char **argv))给出?

我想知道为什么在argc没有传递参数的情况下以这种方式编写语法。为什么他们没有将它设计为关键字或像length这样的函数,只是为了让我们知道计数?

1 个答案:

答案 0 :(得分:1)

你是正确的,当调用其中一个exec*()函数族时,你没有明确指定参数的数量 - 这是由一个空指针结尾处指示的参数列表。

为方便起见,将计数传递给int main(int argc, char **argv)函数,这样代码就不必遍历整个参数列表来确定存在多少个参数。这只是方便 - 因为保证argv[argc] == 0,你可以明确地确定参数的结束。

其余的原因是历史性的 - 它从一开始就是这样做的,并且没有理由改变它(并且每个理由都不改变它)。

关键字'关键词'不清楚你的意思。对于参数计数。 C关键字很少,而且为此目的的关键字很奇怪。类似地,虽然可能有一个功能来完成这项工作,但这并不是必需的 - 所选择的接口不需要这样的功能。对参数列表(和环境)进行功能访问可能很有用,这样库代码就可以枚举参数和环境。 (使用getenv(),您可以了解您所了解的环境变量;您无法了解您不了解的环境变量。在POSIX系统上,有{{1用于枚举环境内容的变量,但它不属于标准C的一部分。)