Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数定义中括号之间的值_C - Fatal编程技术网

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存在的唯一原因

我以前在C中见过这样的人

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所示,其他地方的标准要求在对2arg
main
exist的初始调用中使用
argv[0到argc]
,并且
[argc]
是空指针,并且
[0..argc-1]
指向字符串值(必须为非空)。啊,谢谢!不幸的是,由于许多其他人(和我自己)将此标记为重复,我的问题已经有了答案:P尽管如此,谢谢