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。
我在汇编中开发我自己的 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。