gpt4 book ai didi

c - 关于形式参数中 C 结构数组的错误

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

我有以下代码:

struct student_info;
void paiming1(struct student_info student[]);
struct student_info
{
int num;
char name[6];
};

IDE报错

error: array type has incomplete element type ‘struct student_info’
void paiming1(struct student_info student[]);

但是如果我使用 void paiming1(struct student_info *student); 它就可以正常工作。这是为什么?我正在使用 GCC。

最佳答案

C 语言无条件地要求所有数组声明 中的数组元素类型是完整的。时期。

6.7.6.2 Array declarators
Constraints
1 [...] The element type shall not be an incomplete or function type. [...]

函数参数列表中使用的数组声明也不异常(exception)。这与 C++ 不同——后者放弃了对函数参数列表的完整性要求

struct S;
void foo(struct S[]); // OK in C++, invalid in C

考虑到在参数列表声明中类型 T [] 无论如何都被调整为类型 T *,这个要求可能显得过分。 (这就是为什么 C++ 放宽了它。)然而,这个限制存在于 C 语言中。这只是 C 语言的怪癖之一。

如您所知,您可以显式切换到等效的

void paiming1(struct student_info *student); 

用于解决该问题的表单。

关于c - 关于形式参数中 C 结构数组的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50503501/

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