关于自定义数据类型的一个疑问,该如何处理

关于自定义数据类型的一个疑问
这个疑问产生老久了,也曾问过别人,但是答案并不让我满意.

在我们自定义数据类型时,主要用#define和typedef,在概念上来看#define似乎比typedef强得多,但既然如此,为什么要产生typedef.

一山不容二虎,那些程序研究员也不可能是呆子,它们存在的根本原因是什么.

------解决方案--------------------
typedef有语法分析能力,如果是复杂类型,如函数指针:

typedef int (*)FUNCTION_TYPE(int, int);

用#define就麻烦了
------解决方案--------------------
typedef int(*FUNC)(int);
FUNC 函数指针类型
宏就做不到,
宏只是字符替换,不是代码.而typedef 是代码