在浏览一些源代码,我碰到这样的功能:
void someFunction(char someArray[static 100])
{
// do something cool here
}
随着一些试验似乎其他限定,可能会出现有太多:
void someFunction(char someArray[const])
{
// do something cool here
}
看来,限定符只允许内部的[
]
当阵列被声明为函数的参数。 做这些吗? 为什么函数参数的不同?
第一个声明告诉编译器someArray
是至少 100个元素长。 这可以用于优化。 例如,它也意味着someArray
永远不能为null。
需要注意的是C标准不要求编译器诊断时,该函数的调用不符合这些要求(即它是无声的未定义的行为)。
第二个声明仅仅声明someArray
(没有someArray
的元素!)为const,即你可以不写someArray=someOtherArray
。 这是一样的,如果该参数是char * const someArray
。
此语法仅最里面的内可用[]
中的功能参数列表中的数组声明的,它不会在其他情况下是有意义的。
标准文本,其覆盖上述两种情况下,在C11 6.7.6.3/7(是6.7.5.3/7在C99):
一个参数为“”类型的阵列“”的声明,应调整至“”合格指针为类型“”,其中类型限定符(如果有的话)的那些内的指定[
和]
的数组类型的推导。 如果关键字静态也出现内[
和]
的数组类型派生的,那么对于每个调用函数,相应的实际参数的值应提供访问与至少一样多的元素的数组的第一元素作为指定由大小表达。
文章来源: What is the purpose of static keyword in array parameter of function like “char s[static 10]”?