概述
typedef作用是为一种数据类型定义一个新的名字(包括数据类型int、char等+自定义的数据类型struct等)。
typedef作为一个存储类的关键字,不能与auto、extern、static、register等关键字出现在一个表达式中。
用法
变量声明表达式:新的类型名-替换-变量名,然后在开头加上typedef关键字
例子,
int a; //传统变量声明表达式
int myint_t; //使用新类型名myint_t替换a
typedef int myint_t; //在语句开头加上typedef关键字,myint_t就是我们定义的新类型
例子,
void ( *pfunA )( int a ); //传统变量(函数)声明表达式
void (*PFUNA)(int a); //使用新的类型名PFUNA替换变量名pfunA
typedef void(*PFUNA)(int a); //在语句开头加上typedef关键字,PFUNA就是我们定义的新类型
typedef的作用
作用点1,
定义机器无关的类型。例如定义一个叫“REAL”的浮点类型,该浮点类型在目标机器上能够获得更高的精度。
typedef long double REAL;
如果在不支持long double的机器上运行相关代码,只需要修改对应的typedef语句,例如
typedef double REAL; 或者 typedef float REAL;
作用点2,
使用typedef为现有类型创建别名,给变量定义一个易于记忆且意义明确的新名字,例如
typedef unsigned int UINT;
作用点3,
使用typedef简化一些比较复杂的类型声明,例如
typedef void (*PFunCallBack)(char*pMsg, unsigner int nMsgLen);
注意:语句中类型名PFunCallBack与变量名pFunCallback的大小写区别。
。。。。
typedef与#define
两者的区别如下,
#define进行简单的字符串替换。#define宏定义可以使用#ifdef、#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
typedef是为一个类型起新的名字。typedef符合C语言范围规则,使用typedef定义的变量类型,其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
通常,使用typedef比使用#define要好,特别是在有指针的场合里。
例子1,
typedef char* pStr1;
#define pStr2 char*
pStr1 s1,s2;
pStr2 s3,s4;
在上述的变量定义中,s1s2s3都被定义成char*类型,而s4被定义成char类型,是因为#define只是简单的进行了字符串替换,替换后的代码等同于, char* s3,s4;
而使用typedef为char*定义了新类型pStr1后,相关代码等同于,
char *s1,*s2;
例子2,
typedef char * pStr;
char string[5]="test";
const char *p1=string;
const pStr p2=string;
p1++;
p2++;
在编译过程中报错如下,
。。。
所以,const pStr p2的含义是:限定数据类型为char* 的变量p2 为只读,因此p2++错误。
标签:typedef,定义,int,C语言,char,关键字,类型,define From: https://www.cnblogs.com/zhangzongliang/p/16926938.html