现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

typedef和define的区别

2012-07-14 21:24 工业·编程 ⁄ 共 929字 ⁄ 字号 暂无评论

    typedef是相当于重新定义一种类型,而define仅仅是简单的字符串替换.常用的陷阱是使用define来使用多个变量的替换,容易出错。

举个例子:

1.#define int * PINTA

2.typedef int * PINTB

使用上边的两种例子来定义两个变量

3.PINTA a,b;

4.PINTB c,d;

    第3行中其实a的类型是int *,而b的类型是int,解释一下:在看到define的时候只要把define指定的内容按照原来的情况直接复制下来看结果就行。看PINTA a,b直接转换为int *a, b;这样就很明显的看到a的类型是int *,b的类型是int.

    第4行中c和d的类型都是int *,原因就是typedef是将int *直接定义为PINTB,这样c和d的类型就都是int *了。

问题扩展:

一:使用define来定义宏的时候,一定要将定义的宏直接复制到所用到的地方来看值。最常见的错误是使用define来定义表达式

举例:

#define f(x) x+3

使用的时候5*f(3)结果为18,解释还是先将宏简单的复制下来5*3+3结果是18,如果想要表达式的结果正确那就将宏定义的时候使用括号

#define g(x) (x+3)

使用的时候5*g(3)结果就为5*(3+3)=30

二:在使用typedef时,不能使用存储类关键字(auto、extern、static、register等),编译器会报错

举例:

typedef static int INT32_A;

error C2159: more than one storage class specified

三:看着define有很多缺陷,是不是最好不用呢。其实不然,define有很多好处,比如定义一个常量

#define MAX_LEN 24

程序中使用起来比较方便,如果需要修改直接修改MAX_LEN对应的值就行。

define还有一种比较实用的用法就是定义出参还是入参

#define IN

#define OUT

使用IN或者OUT在函数的定义的时候,代码的可读性比较强

比如int GetValue(IN int a,OUT int *b)程序能一眼看出来第一个参数是入参,第二个参数是出参

总结:

只要记住一条define仅仅是简单的字符串替换就可以了

给我留言

留言无头像?