int f(struct r);
struct r
{
int a;
int b;
};
源文件中的上述代码段会引发错误
warning: its scope is only this definition or declaration,
which is probably not what you want for the line int f(struct r)
和以下代码片段位于同一源文件中,但在函数f(struct r)
的定义之前
struct r emp;
f(emp);
给出错误
error:type of formal parameter 1 is incomplete for the line f(emp)
但结构被typedef
替换时同样的事情,没有这样的错误......
这个属性是否在函数声明中声明一个参数,然后才使用该参数特定于结构?
答案 0 :(得分:5)
尝试其他订单:
struct r { int a; int b; };
int f(struct r);
如果需要在结构之前声明函数,请使用前向声明:
struct r;
int f(struct r);
...
struct r { int a; int b; };
int f(struct r anR)
{
return anR.a + anR.b;
}
问题是在编译int f(struct r);
期间编译器没有看到你的结构,所以它创建了一些临时结构。稍后您对结构的声明是从编译器的角度来看的,与临时结构无关。