yoyo
yoyo

Reputation: 41

What's the difference between these 2 declarations in c?

typedef int (*P)(char *(*)());

int (*P)(char *(*)());

Both seems to be doing the same thing to me,what's the typedef there for?

Upvotes: 4

Views: 181

Answers (3)

cdhowie
cdhowie

Reputation: 169488

The first declares a type called P that you can use in the declaration of other variables. The second declares a variable of that same type.

For illustrative purposes:

typedef int (*P)(char *(*)());

int main() {
    int (*Q)(char *(*)());
    P R;
}

In this example the variables Q and R have exactly the same type.

Upvotes: 9

Chaitannya
Chaitannya

Reputation: 936

The simple answer would be you are creating a new datatype through typedef.

Let's take a simple example, in embedded system we use only unsigned numbers. Now 1 way is I write

unsigned int xyz;

So here I would have to type unsigned everywhere.. What if I forget to type unsigned somewhere, it's very difficult to figure out that if the code is released. So simple way would be

typedef unsigned int uint;

So now you can use uint as a datatype. So whenever parser encounter uint, it would read it as unsigned int.

So in your case you can use P as a datatype in code. So Like in the first example

P xyz ; 

would be parsed as

int (*xyz)(char *(*)());

Upvotes: 1

Sven Marnach
Sven Marnach

Reputation: 602735

The typedef defines P to be a function pointer type. The second version defines P to be a function pointer.

A type can be used to declare variables. After

typedef int (*P)(char *(*)());

you can use

P p;

which will be equivalent to

int (*p)(char *(*)());

Upvotes: 4

Related Questions