`
isiqi
  • 浏览: 16136895 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

#define和typedef的区别

 
阅读更多
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。

2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符


这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *

那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。

pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。

3)#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
分享到:
评论

相关推荐

    #define和typedef的使用

    介绍#define和typedef的区别于使用

    #define VS typedef

    #define是预处理指令 typedef是在编译时处理的 typedef与#define的区别

    C语言中#define与typedef的互换细节详解

    本篇文章是对C语言中#define与typedef的互换细节进行了详细的分析介绍,需要的朋友参考下

    #define宏定义——只替换,不计算! #define VS typedef

    #define的用法与#define和typedef的区别详解。 简单的define定义#define MAXTIME 1000,define的“函数定义”,宏的单行定义,define的多行定义,如何定义宏、取消宏,条件编译等等。

    C语言 #define用法集锦[修正版]

    #define用法集锦 1.简单的define定义 #define MAXTIME 1000 ...这是应该使用typedef 来代替define,这样a 和b 就都是int 型指针了。 所以我们在定义的时候,养成一个良好的习惯,建议所有的层次都要加括号。

    define与typedef 区别

    typedef int * pint ; #define PINT int * 那么: const pint p ;//p不可更改,但p指向的内容可更改 const PINT p ;//p可更改,但是p指向的内容不可更改。 (const pint p === ( const pint )p) (const PINT p ...

    typedef和#define的用法与区别

    文章主要介绍了typedef和#define的用法与区别

    哈夫曼树创建(.cpp )

    #define N 50 /*叶子结点数*/ #define M 2*N-1 /*树中结点总数*/ typedef struct { char data[5]; /*结点值*/ int weight; /*权重*/ int parent; /*双亲结点*/ int lchild; /*左孩子结点*/ int rchild; /*右...

    typedef与define的区别

    typedef与define的用法,说明typedef和define的区别及各自的特殊用法

    C语言自学笔记—typedef与#define的区别

    定义的类型不同,typedef定义的是类型,而#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。 书写方式不同,typedef是定义类型在前,定义对象在后,而#define正好相反 typedef unsigned char u8; ...

    VC有向图最短路径算法程序

    typedef struct { vextype vexs[MAXLEN]; //vextype型的vexs[MAXLEN]数组存放顶点 edgetype arcs[MAXLEN][MAXLEN]; //edgetype型的arcs[MAXLEN][MAXLEN]二维数组存放边的权值 int vexnum,arcnum; }MGRAPH; ...

    #define,const,typedef三者联系与区别

    文章简单介绍了#define,const,typedef三者联系与区别

    数据结构(c语言实现)

    /*所有数组从下标1开始使用,这是为了和顶点表示统一*/ for(i=1;i<=graph->n;i++) graph->vexs[i]=i; for(i=1;i<=graph->n;i++) for(j=1;j<=graph->n;j++) { graph->edges[i][j]=MAXINT;/*缺省值均为无穷大*/ ...

    彩虹贪吃蛇1.exe

    typedef char bool; #define up 'w' #define down 's' #define left 'a' #define right 'd' #define false 0 #define true 1 #endif void gotoxy(int x,int y) { COORD coord; coord.X=x; coord.Y=y; ...

    C语言迷宫设计

    #define M2 12 //M2*N2为实际使用迷宫数组大小// #define N2 11 #define MAXLEN M2 //栈的长度// #define Null -100 #define True 1 #define False 0 int M=M2-2,N=N2-2; //M*N为迷宫的大小// typedef struct{ //...

    数据结构二叉树程序代码.txt

    INIT_SIZE 100 #define STACKINCREMENT 10 #define MAX_TREE_SIZE 100//二叉树的最大结点 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 #define telemtype char #define selemtype char typedef telemtype ...

    数据结构#include

    #define ok 1 #define error 0 #define overflow -1 #define LIST_INIT_SIZE typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; #...

    define与typedef区别与联系

    本文介绍了C语言中两个关键字define和typedef之间的区别以及使用时应注意的问题。

Global site tag (gtag.js) - Google Analytics