C语言中的函数声明和结构声明

时间:2011-02-22 19:08:07

标签: c struct declaration

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替换时同样的事情,没有这样的错误......

这个属性是否在函数声明中声明一个参数,然后才使用该参数特定于结构?

1 个答案:

答案 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);期间编译器没有看到你的结构,所以它创建了一些临时结构。稍后您对结构的声明是从编译器的角度来看的,与临时结构无关。