开发者社区 问答 正文

函数的数组参数(例如“ char s [static 10]”)中的static关键字的用途是什么?

浏览一些源代码时,我遇到了一个类似这样的函数:

void someFunction(char someArray[static 100]) { // do something cool here } 经过一些实验,似乎也可能出现其他限定词:

void someFunction(char someArray[const]) { // do something cool here } 似乎仅[ ]在将数组声明为函数的参数时才允许使用限定符。这些是做什么的?为什么功能参数不同? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 01:08:08 710 分享 版权
1 条回答
写回答
取消 提交回答
  • 第一个声明告诉编译器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也出现在[和]的数组类型推导中,则对于函数的每次调用,对应的实际参数的值应提供对数组第一个元素的访问,且该元素的数量至少应与数组指定的数量相同。大小表达式。

    2020-02-07 01:08:20
    赞同 展开评论
问答分类:
C#
问答标签:
问答地址: