dre*_*lax 131 c arrays parameters static
在浏览一些源代码时,我遇到了这样的函数:
void someFunction(char someArray[static 100])
{
// do something cool here
}
Run Code Online (Sandbox Code Playgroud)
通过一些实验,似乎其他限定符也可能出现在那里:
void someFunction(char someArray[const])
{
// do something cool here
}
Run Code Online (Sandbox Code Playgroud)
似乎只有[ ]在将数组声明为函数的参数时才允许使用限定符.这些怎么办?为什么功能参数不同?
Nor*_*ame 116
第一个声明告诉编译器someArray长度至少为 100个元素.这可以用于优化.例如,它也意味着someArray永远不会为NULL.
请注意,C标准不要求编译器诊断何时对函数的调用不满足这些要求(即,它是静默未定义的行为).
第二个声明只是声明someArray(不是someArray's的元素!)为const,即你不能写someArray=someOtherArray.它与参数相同char * const someArray.
此语法仅[]在函数参数列表中的数组声明符的最内层中可用,在其他上下文中没有意义.
涵盖上述两种情况的标准案文载于C11 6.7.6.3/7(C99为6.7.5.3/7):
一个参数为""类型的阵列""的声明,应调整至""合格指针为类型"",其中类型限定符(如果有的话)的那些内的指定
[和]该阵列类型的推导.如果关键字static也出现在数组类型派生的[和]中,那么对于每次对函数的调用,相应的实际参数的值应提供对数组的第一个元素的访问,其中元素的数量至少与大小表达.