`
kongweile
  • 浏览: 506177 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[C/C++] Typedef和define

阅读更多

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++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef用来为一...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序...

    关于C/C++中typedef的定义与用法总结

    typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,加上自己的一个分析。...

    C++/数据结构 笔试面试+个人笔记资料(含答案和解释)

    包含内容为:typedef struct与struct的区别、typedef和define的区别、malloc与new的区别、函数指针和指针函数、指针数组和数组指针、写一个函数,完成内存之间的拷贝、判断循环队列空满、二元树的遍历算法、无向图...

    c/c++课程设计学生成绩管理系统

    关于c语言和c++的课程成绩信息管理系统,共有将近6000行代码,建议使用vs2012或2010便于管理也可使用VC6.0++环境修改运行但查找麻烦,所有的语言没有脱离c和c++,主要采用模块思想,也可以转换成面向对象型的语言,...

    数据结构 课程设计报告 最小生成树 源代码 C/C++

    绝对可以实现 #include #include #define M 20 #define MAX 20 typedef struct { int begin; int end; int weight; }edge;

    编程模拟简单行编辑器(c/c++)

    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...

    培训机构三级网络技术上机试题及答案代码C/C++

    请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #include #include #define MAX 100 typedef struct{ char dm[5]; /*产品代码*/ char mc[11]; /*产品名称*/ ...

    C++线程通信程序

    #include <stdio.h> ... ///typedef char TCHAR, *PTCHAR; sprintf(strTmp,"Hello %d %x",i++,p); PostThreadMessage(dwThreadId,UM_MSG1,(WPARAM)strTmp,(LPARAM)p); //delete []p; } .......

    typedef和#define的用法以及区别

    以下是对C/C++语言中,typedef和#define的用法以及区别进行了详细的介绍,需要的朋友可以过来参考下

    C++实现数字雨效果

    本文实例为大家分享了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);//...

    C/C++实现树操作的实例代码

    #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; ////////////...

    数据结构 堆排序 MFC

    // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_HEAPSORTDLG_H__DA227A0F_D8D2_459E_A6AE_1F11F292DDDD__INCLUDED_)

    C++停车场程序

    利用队列和链栈的结构构造停车场 #define Max_Size 2//停车的最大容量 #define HourFare 2 //每小时的停车费用 int CountForStack=0; //栈里现有的车数 int CountForQueue=0; //排队等候的车数 typedef struct ...

Global site tag (gtag.js) - Google Analytics