Typedef inside a C struct
c, struct, typedef
Solution
In C language every declaration inside `struct` must declare a data field (possibly unnamed). That means that it is possible to define types inside a `struct` in C, as long as the new type declaration is embedded as a part of a data field declaration. For example
struct Outer {
struct Inner {
int i;
} field;
};
struct Outer a;
a.field.i = 42;
In the above example type `struct Inner` is declared inside type `struct Outer`. However, the "nested" `struct Inner` type declaration is not in any way localized inside `struct Outer`. It will still have file scope, since C language has no such thing as `struct` scope. This means that you can still use `struct Inner` as a member of the same file scope
struct Inner b;
b.i = 42;
Meanwhile, this trick is not applicable to `typedef` declarations, since `typedef` declarations do not declare data fields.
Note that in the spirit of C language, even if your `typedef` declaration was somehow legal, it would still declare a typedef name `MojInt` with file scope. I.e. it would behave exactly the same as if you placed your `typedef` declaration before the `struct`.
Problem
First off the code which boggles my mind: ``` typedef struct Object { typedef int MyInt; void (*destructor)(Object *); void *(*constructor)(struct Object *); } Object; ``` Why does the compiler prevent me from defining a typedef inside a struct?