#define VS typedef

#define VS 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 。例如:

typedef    int       INT;

typedef    int       ARRAY[10];
typedef   (int*)   pINT;

typedef 可以增强程序的可读性,以及标识符的灵活性,但它也有 非直观性 等缺点。

 

3.        typedef #define 的区别

从以上的概念便也能基本清楚, typedef 只是为了增加可读性而为标识符另起的新名称 ( 仅仅只是个别名 ) ,而 #define 原本在 C 中是为了定义常量,到 C++ const enum inline 的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与 typedef 两者到底该用哪个好,如 #define INT int 这样的语句,用 typedef 一样可以完成,用哪个好呢?我主张用 typedef ,因为在早期的许多 C 编译器中这条语句是非法的,只是现今的编译器又做了扩充。为了尽可能地兼容,一般都遵循 #define 定义 可读 的常量以及一些宏语句的任务,而 typedef 则常用来定义关键字、冗长的类型的别名。

宏定义只是简单的字符串代换(原地扩展),而 typedef 则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。

      

       示例 1

typedef    (int*)      pINT;

#define    pINT2    int*

效果相同?实则不同!实践中见差别: pINT a,b; 的效果同 int *a; int *b; 表示定义了两个整型指针变量。而 pINT2 a,b; 的效果同 int *a, b; 表示定义了一个整型指针变量 a 和整型变量 b

 

       示例 2

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 所指的对象。

4.        #define 不是语句不要在行末加分号,否则会连分号一块置换。

你可能感兴趣的:(function,扩展,语言,任务,编译器,behavior)