Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。
1. 首先,二者执行时间不同
关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。
Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。
#define用法例子:
#define f(x) x*x
main( )
{
int a=6,b=2,c;
c=f(a) / f(b);
printf("%d
\\n",c);
}
程序的输出结果是: 36,根本原因就在于#define只是简单的字符串替换。
2. 功能不同
Typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct),可以起到使类型易于记忆的功能。
如: typedef int (*PF) (const char *, const char *);
定义一个指向函数的指针的数据类型PF,其中函数返回值为int,参数为const char *。
typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以i获得最高的精度:typedef long double REAL;
在不支持 long double 的机器上,该 typedef 看起来会是下面这样:typedef double REAL;
并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:typedef float REAL;
#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
3. 作用域不同
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
而typedef有自己的作用域。
void fun()
{
#define A int
}
void gun()
{
//在这里也可以使用A,因为宏替换没有作用域,
//但如果上面用的是typedef,那这里就不能用A ,不过一般不在函数内使用typedef
}
4. 对指针的操作
二者修饰指针类型时,作用不同。
Typedef int * pint;
#define PINT int *
Const pint p;//p不可更改,p指向的内容可以更改,相当于 int * const p;
Const PINT p;//p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;
pint s1, s2; //s1和s2都是int型指针
PINT s3, s4; //相当于int * s3,s4;只有一个是指针。
分享到:
相关推荐
在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一...
本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序...
typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,加上自己的一个分析。...
包含内容为:typedef struct与struct的区别、typedef和define的区别、malloc与new的区别、函数指针和指针函数、指针数组和数组指针、写一个函数,完成内存之间的拷贝、判断循环队列空满、二元树的遍历算法、无向图...
关于c语言和c++的课程成绩信息管理系统,共有将近6000行代码,建议使用vs2012或2010便于管理也可使用VC6.0++环境修改运行但查找麻烦,所有的语言没有脱离c和c++,主要采用模块思想,也可以转换成面向对象型的语言,...
绝对可以实现 #include #include #define M 20 #define MAX 20 typedef struct { int begin; int end; int weight; }edge;
typedef struct { char *base; char *top; int stacksize; }stack; stack bjs; void Init(stack *s) { s->base=(char *)malloc(INILEN*sizeof(char)); s->top=s->base; s->stacksize=INILEN; } void push...
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #include #include #define MAX 100 typedef struct{ char dm[5]; /*产品代码*/ char mc[11]; /*产品名称*/ ...
#include <stdio.h> ... ///typedef char TCHAR, *PTCHAR; sprintf(strTmp,"Hello %d %x",i++,p); PostThreadMessage(dwThreadId,UM_MSG1,(WPARAM)strTmp,(LPARAM)p); //delete []p; } .......
以下是对C/C++语言中,typedef和#define的用法以及区别进行了详细的介绍,需要的朋友可以过来参考下
本文实例为大家分享了C++实现数字雨效果的具体代码,供大家参考,具体内容如下 #include <windows> #define ID_TIMER 1 #define STRMAXLEN 25 //一个显示列的最大长度 #define STRMINLEN 8 //一个显示列的最小长度...
typedef char SElemType,QElemType; typedef struct{ SElemType *base; SElemType *top; int StackSzie; }SqStack; bool InitStack(SqStack *s);//初始化一个栈 void AllInStack(char* ch,SqStack s,int t);//...
#define TRUE 1 #define FALSE 0 typedef int elemtype; typedef struct tNode* tree; typedef struct tNode { elemtype elem; tree left; tree right; }tNode; 计算树的节点个数 //明确函数的功能:返回传入树...
#define MAX 100 typedef int ElemType; ///////////////////////////////////////////// //定义队列类型 typedef struct QNode { ElemType data[MAX]; int front,rear; }SeqQueue; ////////////...
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_HEAPSORTDLG_H__DA227A0F_D8D2_459E_A6AE_1F11F292DDDD__INCLUDED_)
利用队列和链栈的结构构造停车场 #define Max_Size 2//停车的最大容量 #define HourFare 2 //每小时的停车费用 int CountForStack=0; //栈里现有的车数 int CountForQueue=0; //排队等候的车数 typedef struct ...