C语言-typedef和define的用法详解

#define:明示常量(符号常量)

结构

#define 宏 替换体
宏的名称不允许有空格,只能使用字符、数字和下划线,首字符不能是数字

#include <stdio.h>
#define TWO 2
#define WOW "zhejuhua haochang a \
zhende haochang zhende ."		//反斜杠把该定义延续到下一行
#define FOUR TWO*TWO
#define PX printf("X is %d.\n",x)
#define FMT "X is %d.\n"

int main()
{
	int x=TWO; 
	PX;
	x=FOUR;
	printf(FMT,x);
	printf("%s\n",WOW);
	return 0;
}

typedef:类型定义

c语言提供了typedef用来为某个已存在的类型增加一个新的名称
换另外一种说法就是:为已存在的类型命名(定义)一个标识符;

与#define的不同

(1)typedef创建的符号名只受限于类型,不能用于值。
(2)typedef由编译器解释,不是预处理器。
(3)在其受限范围内,typedef比#define更灵活。

与#define重合的功能

#define BYTE unsighed char
typedef unsigned cahr BYTE;

typedef用法

typedef int Length;		//将Length定义为与int具有相等意义的名字。
				//类型Length可以用于类型声明、类型转换等,
				//它和类型int完全相同。
typedef char *String;  		//将string定义为与char *(字符指针)同义
//定义的新名称以大写字母开头。
Length len,maxlen;		//相当于int len,maxlen;
Length *lengthes[];		//int *lengthes[];

类似地

typedef long Bolckno,*Blockptr;	
typedef struct { double x,y; } Point;

Blockno b;			//b的类型为long。
extern Blockptr bp;		//bp的类型为“指向long类型的指针”。
Point z = {3.0,6.0};		//z的类型为指定结构类型
			//编译器会解释为struct {double x,y;}  z={3.0,6.0};	
Point *zp;			//zp的类型为指向该结构的指针。
//定义二叉树节点结构
typedef struct tnode *Treeptr;
typedef struct tnode{
	char *word;
	int count;
	Treeptr left;		//左子树,相当于struct tnode *left;
	Treeptr right;		//右子树,相当于struct tnode *right;
}Treenode;
//创建了两个新类型关键字:Treenode(一个结构)和Treeptr(一个指向Treenode的指针)。

typedef类似于#define语句,但是由于typedef是由编译器解释的,因此它的文本替换功能要超过预处理器的能力,例如:

typedef int (*PFI)(char *,char *);	//该语句定义了类型PFI是“一个指向函数的指针,
					//该函数具有两个char *类型的参数,	
					//返回的值类型为int”。
PFI strcmp,numcmp;					

typedef的优点

(1)使表达方式简洁
(2)提高程序的可移植性:typedef声明的数据类型同机器有关,那么当程序移植到其他机器上时,只需要改变typedef类型定义就可。对于移植到各种不同大小的整型值机器上来说,只需要选择合适的short、int、long类型大小即可。
(3)为程序提供更好的说明性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值