gpt4 book ai didi

c - C99 中那些奇怪的数组大小 [*] 和 [static] 是什么?

转载 作者:太空狗 更新时间:2023-10-29 16:23:10 25 4
gpt4 key购买 nike

显然以下函数原型(prototype)在 C99 和 C11 中有效:

void foo(int a[const *]);

void bar(int a[static volatile 10]);

那些奇怪的下标符号 *static 和 CV 限定符的目的是什么?

它们是否有助于区分静态类型数组和可变长度数组?或者它们只是语法糖?

最佳答案

参数数组声明符中的静态

 void f(int a[static 10]);

static 表示参数 a 是指向 int 的指针,但数组对象(其中 a 是指向其第一个元素的指针)至少有 10 个元素。

然后编译器有权假定 f 参数不是 NULL,因此它可以执行一些优化。 gcc 当前未执行任何优化 ( source ):

"The information provided by static in parameter array declarators is not used for optimization. It might make sense to use it in future in conjunction with work on prefetching."

参数数组声明符中的限定符

void g(int a[cvr 10]);

ga 是一个指向 intcvr 指针(cvrconstvolatilerestrict 限定符)。例如,const 意味着 a 是指向 intconst 指针(即类型 int * const).

所以一个参数声明:

T param[cvr e] 

与参数声明相同:

T * cvr param

* 在参数数组声明符中

void h(int a[*]);

函数声明中形式数组参数声明中的[*](不是函数定义的一部分)表示形式数组是可变长度数组。

关于c - C99 中那些奇怪的数组大小 [*] 和 [static] 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com