首页 > 其他 > 详细

typedef,static,const用法

时间:2015-10-01 23:00:06      阅读:270      评论:0      收藏:0      [点我收藏+]

一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存

宏与typedef区别

1.宏定义只是简单的字符串替换

2.typedef定义的类型是类型的别名,typedef后面是一个整体声明,是不能分割的一个整体,具有一定的封装性,不是简单的字符串替换

看下面的例子:

#define PSTR_MACRO char*

typedef char* PSTR

int main()

{

  PSTR piVar1,piVar2;

  PSTR_MACRO piVar3,piVar4;

  int iVar = 100;

  piVar1 = &iVar;

  piVar2 = &iVar;

  piVar3 = &iVar;

  piVar4 = &iVar;

  printf("piVar1 = %0X\r\n",piVar1);

  printf("piVar2 = %0X\r\n",piVar2);

  printf("piVar3 = %0X\r\n",piVar3);

  printf("piVar4 = %0X\r\n",piVar4);

}

输出piVar1 = 19FC78

piVar2 = 19FC78

piVar3 = 19FC78

piVar4 =78

typedef主要为复杂的声明定义简单的别名,它本身是一种存储类的关键字,与auto,extern,mutable,static,register等关键字不能出现在同一个表达式中,如typedef static int nValue

typedef的其它用途

1.用在旧的C代码中,声明struct新对象时,必须带上struct,即形式为struct结构体对象名,例如

struct tagPOINT    为了实现在结构体使用过程中少写声明头部分的struct,可采用      typedef struct tagPOINT

{                                             {

  int x;                                           int x;

  int y;                                           int y;

};                                             }POINT;

struct tagPOINT pl;                                    POINT pl;

在C++中,typedef的这种用途不是很大,但理解了它,对掌握以前的旧代码还是有帮助的

2.另外一个用途就是定义与机器无关的类型,保障代码具有较好的跨平台特性。例如,可定义一个名为REAL_NUM的浮点类型,在目标机器上它可以获得最高的精度

typedef long double REAL_NUM

在不支持long double的机器上,通过typedef可采用如下定义

typedef double REAL_NUM

对于连double都不支持的机器上,通过typdedef可采用如下定义

typedef float REAL_NUM;

采用typedef实现数据类型的定义,只需对typedef本身进行修改,不用对源代码做任何修改,便可以在每一种平台上编译这个使用REAL_NUM类型的应用程序

3.为复杂的声明定义一个简单的名称,简化代码。这一功能可增强代码的可读性和标识符的灵活性

例如

int*(*paFunc[6])(char* pszInput)    简化后为typedef int* (*pFunc)(char* pszInput)    pFunc paFunc[6]

typedef BOOL *CallBackFunc(const char* pszData,const int nDatalength);    CallBackFunc m_pCallBackFunc;

 

typedef,static,const用法

原文:http://www.cnblogs.com/fenghuan/p/4851660.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!