「普通に」プログラムを起動した場合はゼロになることはない(=ゼロになるような起動のしかたは普通しない)のですが、以下のようにするとゼロになります (Linux) 。

[umezawa@umezawa-dev:pts/0 main_args]$ cat one.c
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main(void)
{
        char* argv[] = { NULL };
        char* envp[] = { NULL };

        execve("./two", argv, envp);
        printf("execve: %s\n", strerror(errno));
        return 0;
}
[umezawa@umezawa-dev:pts/0 main_args]$ cat two.c
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main(int argc, char** argv)
{
        printf("argc = %d\n", argc);
        for (int i = 0; i < argc; ++i)
                printf("argv[%d] = %s\n", i, argv[i]);
        return 0;
}
[umezawa@umezawa-dev:pts/0 main_args]$ ./one
argc = 0

実際、 C の規格書を見ると、

  • The value of argc shall be nonnegative.
  • If the value of argc is greater than zero, …

みたいなことが書いてあります。 C++ の規格書でも同等のことが書いてあります。

argc がゼロになることを考慮してプログラムを書くことはあまりないと思いますが…

Trackback

no comment untill now

Add your comment now