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 specifierinside a function definition。

3)typedef int * int_ptr;

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

//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

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

(define 只是符号的替换,typedef确实类型的表示)
这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
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 ===  const (PINT p ))

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

3)也许您已经注意到#define 不是语句不要在行末加分号,否则会连分号一块置换。

(栽录修改 )

时间: 2024-08-08 09:42:15

define与typedef 区别的相关文章

c语言define和typedef区别和使用

define完全可以理解替换,typedef代表别名.听着差不多的意思,那2者区别在哪? 先来个简单例子查看基本使用. //define和typedef区别 #define DB double //替换 define 被替换的内容 替换的内容 typedef double db; //别名 typedef 原来的类型名 新的别名 //typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错 void main() { //看不出区别 DB d1 = 1.2,d2=1

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi

define和typedef区别

一.起作用的时间不同 typedef在编译阶段起作用,因此有类型检查的功能. define在预处理阶段起作用(编译之前),只进行简单的字符串替换而不进行类型检查. 二.功能不同 typedef (1)用来定义类型的别名 (2)定义机器无关的类型 (例如定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL; 那么在不支持 long double 的机器上,该 typedef 看起来会是下面这样:typedef double REAL;

#define和typedef的简单区别及使用

/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进

#define 和typedef的区别

typedef和define的详细区别 2011-04-19 15:11 firnow firnow 字号:T | T 对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的.本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考. AD:51CTO学院:IT精品课程在线看! typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起

define与typedef

#define与typedef有相似之处,但二者有本质区别 1 #define INTEGER int 和 typedef int INTEGER; 程序中INTEGER都可当做int使用,前者是预处理的宏代换,将程序中所有INTEGER先替换为int再进行编译,并没有产生新的名字:而后者是为int取了一个新的别名. 1 typerdef struct 2 { 3 int num; 4 char count; 5 }STUDENT;//STUDENT 是类型别名,注意它与直接定义结构体变量的区别

iOS const和#define常量的区别

(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具体的类型,在编译阶段会执行类型检查. (3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存. const常量会在内存中分配(可以是堆中也可以是栈中). (4)const  可以节省空间,避免不必要的内存分配. 例如:          #define PI 3

typedef和define的详细区别

typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起来看. typedef是C语言语句,其功能是用户为已有数据类型取“别名”. 例如: typedef int INTEGER: 这以后就可用INTEGER来代替int作整型变量的类型说明了,如: INTEGER a,b; 用typedef定义数组.指针.结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性.

[c++]通过一个简单的程序引出#define与typedef的区别

废话不多说,请看下面程序: #include<iostream> using namespace std; #define SIGN1 char* // typedef char * SIGN2;//typedef是一条语句所以以分号结尾 int main() { SIGN1 ch1,ch2; SIGN2 ch3,ch4; cout<<sizeof(ch1)<<" "<<sizeof(ch2)<<endl; cout<&