C 函数定义中括号之间的值
我以前在C中见过这样的人C 函数定义中括号之间的值,c,C,我以前在C中见过这样的人 int main (int argc, char *argv[argc+1]) { /* ... */ } argc+1的意义是什么?它是什么意思?它有助于防止无效指针还是什么?一方面,这在“经典”C(C89/90)中是不允许的,因为数组大小表达式不是常量。它在C99年成为法律 另一方面,即使在C99中,函数参数声明中的顶级数组大小仍然被忽略,并且声明相当于 int main (int argc, char **argv) 因此,argc+1存在的唯一原因
int main (int argc, char *argv[argc+1])
{
/* ... */
}
argc+1
的意义是什么?它是什么意思?它有助于防止无效指针还是什么?一方面,这在“经典”C(C89/90)中是不允许的,因为数组大小表达式不是常量。它在C99年成为法律
另一方面,即使在C99中,函数参数声明中的顶级数组大小仍然被忽略,并且声明相当于
int main (int argc, char **argv)
因此,
argc+1
存在的唯一原因是作为一个自我文档功能:它告诉读者,argv
指针指向一个数组的开头,其中包含argc+1
有效元素。不能说我看到了char*argv[argc+1])
-任何引用都没有意义,因为编译器会忽略它。我找到了。这是黑客新闻-。“这据称有助于防止传入空指针,并可能告诉分析器和优化器一些他们应该知道的事情。”“这据称有助于防止传入空指针”相反,C规范保证argv[argc]
是空指针。因此,如果编译器以某种方式强制执行非空规则(不是),则main
的定义将无效。如dupe(简要)所述,如果数组语法用于带有关键字static
(仅C99或更高版本)的函数参数,而此Q不使用,它告诉编译器/etc调整后的参数必须至少指向那么多元素,因此必须为非null;它不需要任何关于元素值的信息,这里是argv[i]
中的指针。正如@user3386109所示,其他地方的标准要求在对2argmain
exist的初始调用中使用argv[0到argc]
,并且[argc]
是空指针,并且[0..argc-1]
指向字符串值(必须为非空)。啊,谢谢!不幸的是,由于许多其他人(和我自己)将此标记为重复,我的问题已经有了答案:P尽管如此,谢谢