typedef和define的区别
来源:互联网 发布:手机投影软件 编辑:程序博客网 时间:2024/05/18 03:51
typedef和define的区别
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仅仅是简单的字符串替换就可以了
- typedef和define的区别
- typedef 和 define的区别
- define和typedef的区别
- #define和typedef的区别
- Typedef和define的区别
- #define和typedef的区别
- Typedef和define的区别
- #define和typedef的区别
- Typedef和#define的区别
- typedef 和 define的区别
- typedef和#define的区别
- define和typedef的区别
- typedef和#define的区别
- typedef和define的区别
- typedef和#define的区别
- typedef和#define的区别
- typedef和define 的区别
- typedef和define的区别
- linux找不到库文件
- 开端
- java toString()用法
- java中堆与栈的区别
- Wireshark 部分数据结构
- typedef和define的区别
- myeclipse 开发环境下,提示 String cannot be resolved to a type .
- java中复制数组的方法
- Ubuntu安装Macbuntu后 中文冒号变乱码问题
- 获得操作系统信息,关机,重启
- short s1 = 1; s1 = s1 + 1L;与short s1 = 1; s1 += 1L;
- C#高效反射调用方法类
- 使用AspNetPager分页控件和ObjectDataSource控件进行分页的步骤
- 32位操作系统下各种数据类型所占有的字节数