1.#define是一个预处理指令,在预编预处理时进行简单的替换,不作正确性检查;
2.typedef是在编译时处理的,typedef不是简单的替换,而是采用如同定义变量那样的方法来声明一种类型;
3.typedef一个比较难且常用的用法可以参考以下内容。
http://blog.chinaunix.net/uid-26963688-id-3466311.html
#define FLOATPTR float*
FLOATPTR a,b;
b是什么类型的变量呢,如果大意的话我们会误认为b位float *,而实际上b是float型;#define是C语言中的宏定义,一般可以分为两种,即是带参数的宏定义,也可以是不带参数的宏定义。我们可以作简单的替换就是float *a,b;
#define MIN(x,y) x<y?x:y;如果调用MIN(3,2),即是3<2?3:2,符合程序的目的,但如果调用MIN(1+2,2),即是1+2<2?1+2:2,因为宏不做表达式求解,只会简单带入;这种情况下很显然是不符合程序的目的;
综上所述对于不带参数的宏定义应注意以下几点:
1.宏定义末尾不加分号;;
2.宏定义分行写时行尾要加‘\';
3.可以用#undef命令终止宏定义的作用域;
对于带参数的宏定义应注意以下几点:
1.宏名和参数的括号间不能有空格;
2.宏的参数要加括号;
3.宏不做表达式求解;
以上内容摘自李亚锋先生的《经典C面试 真题精讲》