小心使用typedef带来的陷阱

                                                            20170726 --iRanMan                                                                                          

我们知道在C语言中使用关键词typedef能带来很大的好处,但是有些时候这也会带来一些差错,本文主要讲使用typedef带来的陷阱。

看一个简单的typedef使用实例,如下:

typedef char* PCHAR;   //定义类型char*为PCHAR
int strcmp(const PCHAR, const PCHAR); 

代码中的”const PCHAR”是否等价于”const char*” (一个指向常量char的指针)呢?  

不是。

typedef是用来定义一种类型的新别名,不同于宏,不是简单的字符串替换。所以”const PCHAR”中的const给予了整个指针本身常量性,即形成了指向char的常量指针,”char* const”……是不是好拗口?多思考。

说白了,就是char* 是个整体,const 是针对char*,而不是char,相当于”char* const”

如果想要让”const PCHAR”等价于”const char*”,如下:

typedef const char* PCHAR;
int strcmp(PCHAR,PCHAR);

其实,无论什么时候,只要为指针声明typedef,就应该在最终的typedef名称中加上const,使得该指针本身就是常量。

需要特别注意的是,虽然typedef不影响对象的存储特性,但在语法上它是存储类的关键字,如auto, extern, static和register等,而一条指令中不能同时声明多个存储类关键字,所以typedef static int INT_STATIC是不可行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值