1.The typedef is limited to giving symbolic names to types only where as #define can be used to define alias for values as well, like you can define 1 as ONE etc.
2.#define should not be terminated with semicolon, but typedef should be terminated with semicolon.
3.he typedef interpretation is performed by the compiler where as #define statements are processed by the pre-processor.
4. #define will just copy-paste the definition values at the point of use, while typedef is actual definition of a new type
5.typedef follows the scope rule which mean if a new type is defined in a scope(inside a function), then the new type name will only be visible till the scope is there.
Here I got exact answer..
Typedef vs Define in c