parthiban
parthiban

Reputation: 33

Function Declarations and Structure declarations in C

int f(struct r);
struct r
{
int a;
int b;
};

The above snippet in a source file throws an error that

warning: its scope is only this definition or declaration,
which is probably not what you want for the line int f(struct r) 

and the following snippet somewhere in the same source file but before the definition of function f(struct r)

struct r emp;
f(emp);

gives an error

error:type of formal parameter 1 is incomplete for the line f(emp)

but the same thing when the struct is replaced by typedef, there were no such such errors...

Is this property to declare an argument in a function declaration before its use is specific to structure alone?

Upvotes: 2

Views: 10188

Answers (1)

Vlad
Vlad

Reputation: 35584

Try the other order:

struct r { int a; int b; };
int f(struct r);

If you need the function to be declared before the struct, use a forward declaration:

struct r;
int f(struct r);
...
struct r { int a; int b; };
int f(struct r anR)
{
    return anR.a + anR.b;
}

The problem is that during the compilation of int f(struct r); the compiler doesn't see your structure, so it creates some temporary structure instead. Your declaration of the structure later is from the compiler's point of view not related to the temporary one.

Upvotes: 5

Related Questions