“char s ”这个函数的数组参数中static关键字的用途是什么?
浏览一些源代码时,我遇到了这样一个函数:
void someFunction(char someArray[static 100]) { // do something cool here }
通过一些实验,看起来其他限定符也可能出现在那里:
void someFunction(char someArray[const]) { // do something cool here }
当数组声明为函数的参数时,似乎限定符只允许在[
]
内。 这些做什么? 为什么function参数不同?
第一个声明告诉编译器someArray
至less有 100个元素。 这可以用于优化。 例如,这也意味着someArray
从不为NULL。
请注意,C标准不要求编译器诊断对函数的调用何时不符合这些要求(即,它是静默未定义的行为)。
第二个声明只是声明someArray
(不是someArray
的元素!)为const,即你不能写someArray=someOtherArray
。 就像参数是char * const someArray
。
这个语法只能在函数参数列表的数组声明符的最里面的[]
中使用,在其他上下文中是没有意义的。
包含上述两种情况的标准案文见C11 6.7.6.3/7(C99中为6.7.5.3/7):
参数声明为''数组types''应该被调整为''限定types指针',其中types限定符(如果有)是在数组types派生的
[
和]
中指定的。 如果关键字static也出现在数组types派生的[
和]
中,那么对于函数的每次调用,相应实际参数的值将提供对数组的第一个元素的访问,至less与指定的元素一样多由大小expression。