gpt4 book ai didi

c - "[*]"(星号修饰符)在 C 中是什么意思?

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

<分区>

在尝试实现 C11 解析器(用于教育目的)时,我发现在 C11 (p. 470) 中而且在C99 (p. 412) (感谢 Johannes!),直接声明符 定义为:

(6.7.6) direct-declarator:  
direct-declarator [ type-qualifier-list? * ]

起初,我认为这是语法错误(类型列表不应该是可选的)。然而,当我在我的引用编译器 (clang) 中尝试这个时,我得到了一个相当意外的错误:

int array[*] = { 1, 2, 3 };
// error: star modifier used outside of function prototype

很明显,(在 clang 中)这被称为 star modifier

我很快了解到它们只能用于函数签名:

void foobar(int array[*])

但是,它们只能在声明中使用。尝试在函数定义中使用它也会导致错误:

void foobar(int array[*]) {
// variable length array must be bound in function definition
}

据我所知,预期的行为是在函数声明中使用 [*],然后在函数定义中使用固定数字。

// public header
void foobar(int array[*]);

// private implementation
void foobar(int array[5]) {

}

不过,我没见过,也不太明白它的用途。

  1. 它的目的是什么,为什么添加它?
  2. int[] 有什么区别?
  3. int * 有什么区别?

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