Reputation: 945
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
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
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