宏并不是类型定义

宏的一个常见用途是,使多个不同变量的类型可在一个地方说明

 

#define foottype struct foo

footype a;

foottype b,c;

 

这样,编程者只需在程序中改动一行代码,即可改变a,b,c的类型,而与a,b,c在程序中的地方 申明无关

 

宏定义的这种用法有一个优点———可移植性,得到了所有c编译器的支持。但是,我们最好还是使用类型定义。

       typedef struct foo footype;

这个语句定义了footype为一个新的类型,与struct foo完全等效。

 

这两种命名类型的方式似乎都差不多,但是使用typedef的方式要更加通用以写。例如,考虑下面的代码

       #define t1 struct foo *

       typedef struct foo *t2;

从上面两个定义来看,t1和t2从概念上完全符合,都是指向结构foo的指针。但是,当我们试图用他们来声明多个变量时,问题就来了;

       t1 a,b;

       t2 a,b;

第一个声明被扩展为:

      struct foo *a,b;

这个语句中a被定义为一个指针结构的指针,而b却被定义为一个结构(而不是指针)。第二个声明则不同,它被定义了a,b都是指针结构的指针,因为这里的t2的行为完全与真实的类型相同。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值