Jing
Jing

Reputation: 945

typedef array type in C

typedef int arr[10]

I understand that the above statement defines a new name for int[10] so that

arr intArray;

is equivalent to

int intArray[10];

However, I am confused by the convention for doing this. It seems to me that

typedef int arr[10]

is confusing and a clear way to me is

typedef int[10] arr

i.e. I define the "int[10]" to be a new type called arr

However, the compiler does not accept this.

May I ask why ? Is it just a convention for C language ?

Upvotes: 7

Views: 2997

Answers (2)

Keith Thompson
Keith Thompson

Reputation: 263647

Very early versions of C didn't have the typedef keyword. When it was added to the language (some time before 1978), it had to done in a way that was consistent with the existing grammar.

Syntactically, the keyword typedef is treated as a storage class specifier, like extern or static, even though its meaning is quite different.

So just as you might write:

static int arr[10];

you'd write:

typedef int arr[10];

Think of a typedef declaration as something similar to an object declaration. The difference is that the identifier it creates (arr in this case) is a type name rather than an object name.

Upvotes: 11

Scott Hunter
Scott Hunter

Reputation: 49920

Because that's how the language was defined. My guess is that, in part, it is so that what goes into a typedef follows the same rules as a normal variable declaration, except that the name is the name of the type instead of a variable (and thus that part of the parser can be re-used).

Upvotes: 0

Related Questions