Tag: variable length array

C中的“”(星号修饰符)是什么意思?

在试图实现一个C11parsing器(为了教育目的)时,我发现在C11(470页),但也在C99(412页) (感谢Johannes!), 直接声明符被定义为: (6.7.6) direct-declarator: direct-declarator [ type-qualifier-list? * ] 起初,我认为这是语法错误(types列表不应该是可选的)。 但是,当我在我的参考编译器(铿锵声)中尝试了这一点,我得到了一个意想不到的错误: int array[*] = { 1, 2, 3 }; // error: star modifier used outside of function prototype 很明显,(在叮当中)这叫做星形修饰符 。 我很快就了解到,他们只能用于function签名: void foobar(int array[*]) 但是,他们只能用在声明中。 试图在函数定义中使用它也会导致错误: void foobar(int array[*]) { // variable length array must be bound in function definition } 所以据我所知,预期的行为是在函数声明中使用[*] ,然后在函数定义中使用一个固定的数字。 // […]