DMDのコード内ではargcが0な環境を想定してコードが書かれているが、そういう環境は存在するのだろうか。
調べてみるとわりとすぐにstackoverflowがみつかった。
c - executing a process with argc=0 - Stack Overflow
posix_spawnを使えばできるようなので、実際に試してみる。
#include <spawn.h> #include <stdlib.h> int main(int argc, char** argv, char** envp) { pid_t pid; char* zero_argv[] = {NULL}; posix_spawn(&pid, "/home/kubo39/dlang/dmd-2.085.0/linux/bin64/dmd", NULL, NULL, zero_argv, envp); int status; waitpid(&pid, &status, NULL); return 0; }
たしかにargcが0のときの処理が実行されているようだ。
$ ./a.out Error: missing or null command line arguments $ echo $? 0
ちなみにrustcの場合は Error: couldn't determine self executable name
と表示され、goでは panic: runtime error: index out of range
になった。