argc 是否会通过小于 1

Would argc ever be passed less than 1

我在汇编中开发我自己的 getopt() 版本并试图让我的头脑围绕 this snippet,特别是第 476 行

    if (argc < 1)
       return -1;

因为正常的调用约定是这样的;

    int c = getopt( argc, argv, "vm:drx:");

并且假设程序员事先没有对 argc 做任何事情,我认为它存在的唯一原因是 Linux 的某种风格,可能不符合 POSIX nt pass argv[0] 应用程序路径和名称。因此,argc 可能为零。这个猜想靠谱吗?

在此过程中使用此变量的 12 次中,在此之前的两个级别的过程中,它仅被断言或复制,从未修改且根本未被引用。

考虑一下:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
        execve("./testargc", NULL, NULL);
}

而这个程序:

#include <stdio.h>

int main (int argc, char* argv[])
{
        printf("%d\n", argc);
}

第一个不带参数执行第二个。路径名未传入,因此 argc 为 0。