浏览一些源代码时,我遇到了一个类似这样的函数:
void someFunction(char someArray[static 100]) { // do something cool here } 经过一些实验,似乎也可能出现其他限定词:
void someFunction(char someArray[const]) { // do something cool here } 似乎仅[ ]在将数组声明为函数的参数时才允许使用限定符。这些是做什么的?为什么功能参数不同? 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
第一个声明告诉编译器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也出现在[和]的数组类型推导中,则对于函数的每次调用,对应的实际参数的值应提供对数组第一个元素的访问,且该元素的数量至少应与数组指定的数量相同。大小表达式。