static char关键字在函数数组参数中的用途如“char s [static 10]”?在浏览一些源代码时,我遇到了这样的函数:void someFunction(char someArray[static 100]){
// do something cool here}通过一些实验,似乎其他限定符也可能出现在那里:void someFunction(char someArray[const]){
// do something cool here}似乎只有[ ]在将数组声明为函数的参数时才允许使用限定符。这些怎么办?为什么功能参数不同?
2 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
第一个声明告诉编译器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也出现在数组类型派生的[
和]
中,那么对于每次对函数的调用,相应的实际参数的值应提供对数组的第一个元素的访问,其中元素的数量至少与大小表达。
蓝山帝景
TA贡献1843条经验 获得超7个赞
关于这个主题:我想知道是否应该考虑使用int foo(struct bar [static 1]);
而不是int foo(struct bar *);
作为不接受NULL指针的函数的签名。(我知道gcc有一个替代的非标准语法来标记这样的函数,以便编译器可以发出警告..)
- 2 回答
- 0 关注
- 947 浏览
添加回答
举报
0/150
提交
取消