“char s [static 10]”这个函数的数组参数中static关键字的用途是什么?
在浏览一些源代码时,我遇到了这样的功能:
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中(C99中为6.7.5.3/7):
一个参数声明为''数组类型''应该被调整为''限定类型指针',其中类型限定符(如果有的话)是在数组类型派生的[
和]
中指定的。 如果关键字static也出现在数组类型派生的[
和]
中,那么对于函数的每次调用,相应实际参数的值应提供对数组第一个元素的访问,其中至少与指定的元素数量一样多由尺寸表示。
上一篇: What is the purpose of static keyword in array parameter of function like "char s[static 10]"?
下一篇: Is PHP thread