如果struct类型的声明放在函数体内,比如下面这个程序:
#include<stdio.h>
#define N 5
int main()
{
struct Student *input(struct Student *p);
struct Student
{
int num;
char name[10];
float score[3];
};
struct Student stu[N],*s=stu;
s=input(stu);
return 0;
}
struct Student *input(struct Student *p)
{
}
编译时在引用input函数行出现错误:“Student *类型的实参与Student *类型的形参不兼容“,
这个错误的原因可解释为struct类型的声明在input函数的声明之后,函数无法对实参、形参进行匹配。
但如果把struct类型声明放在input函数声明之前(仍然在main函数内),则会在input函数声明行出现错误:
”使用局部类型声明的 函数“input”必须在此翻译单元中定义“。
这个错误出现的原因就无法解释了。
当然,struct类型的声明放在主函数之前就没有任何错误。