【发布时间】:2016-03-09 19:46:16
【问题描述】:
我以前见过有人用 C 做这样的事情 -
int main (int argc, char *argv[argc+1])
{
/* ... */
}
argc+1 的意义是什么?它是什么意思?它是否有助于防止无效指针或什么?
【问题讨论】:
-
不能说我见过
char *argv[argc+1])- 任何参考 -
没有任何意义,因为编译器会忽略它。
-
我找到了。它出现在 Hacker News - news.ycombinator.com/item?id=9019085 上。 " 据称这有助于防止传入空指针,并可能告诉分析器和优化器一些他们应该知道的事情。"
-
“据称这有助于防止传入空指针” 相反,C 规范保证
argv[argc]是 空指针.因此,如果编译器以某种方式强制执行非 NULL 规则(实际上没有),那么main的定义将无效。 -
正如被骗者(简要地)描述的那样,如果数组语法用于函数参数带有关键字
static(仅限C99或更高版本),而这个Q没有,它告诉编译器/等调整后的参数必须至少指向那么多元素,因此必须是非空的;它不需要关于元素值的任何内容,这里是指针 inargv[i]。正如@user3386109 表明其他地方的标准要求argv[0 to argc]在初始调用2arg 时main存在,[argc]是空指针,[0..argc-1]指向字符串值(必须非空)。跨度>
标签: c