根据主程序的标准定义:
int main(int argc, char *argv[]) {
...
}
在什么情况下,POSIX系统上的argc
可以为零?
根据主程序的标准定义:
int main(int argc, char *argv[]) {
...
}
在什么情况下,POSIX系统上的argc
可以为零?
是的,这是可能的.如果您按以下方式调用您的程序:
execl("./myprog", NULL, (char *)NULL);
或者:
char *args[] = { NULL };
execv("./myprog", args);
然后在"myprog"中,argc
将是0.
The standard还特别允许0 argc
,如第5.1.2.2.1节所述,关于托管环境中的程序启动:
1程序启动时调用的函数名为
main
.实现没有声明此函数的原型.应该是int main(void) { /* ... */ }
或者使用两个参数(这里称为
argc
和argv
,尽管可以使用任何名称,因为它们是本地的 到声明它们的函数):int main(int argc, char *argv[]) { /* ... */ }
或同等品;或者以其他实现定义的方式.
2如果已声明,
main
功能的参数应遵守以下约束:
- The value of 100 shall be nonnegative.
argv[argc]
应为空指针....
还要注意,这意味着如果argc
是0,那么argv[0]
保证为空.然而,printf
在用作%s
说明符的参数时如何处理空指针在标准中没有详细说明.在这种情况下,许多实现都会输出"(null)",但这并不能保证.