C&C++中,typedef与#define

原创 2004年07月23日 01:37:00

一、typedef的用法

____在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:

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

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

二、#define的用法

____#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题,它的实例像:

#define   INT             int
#define   TRUE         1
#define   Add(a,b)     ((a)+(b));
#define   Loop_10    for (int i=0; i<10; i++)

____在Scott Meyer的Effective C++一书的条款1中有关于#define语句弊端的分析,以及好的替代方法,大家可参看。

三、typedef与#define的区别

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

____宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。请看上面第一大点代码的第三行:

typedef    (int*)      pINT;
以及下面这行:
#define    pINT2    int*

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

____注意:两者还有一个行尾;号的区别哦!

 

typedef和#define究竟有什么区别?

typedef int * int_ptr ; 与#define int_ptr int * 作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行...
  • Pwiling
  • Pwiling
  • 2015年08月16日 21:20
  • 1247

typedef(自定义数据类型)与#define(宏定义)用法比较(前者定义指针比define好用)---(转载)

不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些...
  • liaoshengshi
  • liaoshengshi
  • 2015年07月24日 22:04
  • 1344

c/c++中define用法详解及代码示例

c++中define用法define在c++语言中用法比较多,这里对其进行整理。1.无参宏定义无参宏的宏名后不带参数。 其定义的一般形式为:#define 标识符 字符串其中的“#”表示这是一条...
  • u012611878
  • u012611878
  • 2016年09月15日 12:46
  • 21899

C/C++ Notes: #define和#typedef的区别以及构造函数和析构函数

#define和#typedef的区别 两者的最主要区别是前者是预编译阶段(没到编译阶段)进行的内容替换。而#typedef是在编译阶段为现有的类型(自定义或者基本类型)创建一个别名。前者在预编译...
  • Firehotest
  • Firehotest
  • 2016年10月11日 07:20
  • 385

浅谈C/C++中的typedef和#define

浅谈C/C++中的typedef和#define     在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是...
  • xiangjai
  • xiangjai
  • 2013年03月24日 21:19
  • 529

C/C++关键字static,const,inline,define,typedef

http://blog.21ic.com/user1/4071/archives/2008/48217.html 一 static1) 产生背景 引出原因:函数内部定义的变量,在程序执行到它的...
  • kmblack1
  • kmblack1
  • 2011年03月13日 08:08
  • 665

浅淡C/C++中的typedef和#define

在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏 定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++...
  • whkjlcw
  • whkjlcw
  • 2014年04月10日 20:54
  • 564

详解C/C++中的typedef和#define

在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的...
  • u012372584
  • u012372584
  • 2014年08月21日 16:01
  • 538

C/C++中的一些基本语法(define/typedef)

typedef用法 与#define (有从其他处借鉴和参考) typedef根据名字就知道是对类的定义。但是值得注意的是,它并不定义新的类型,而是对已有的类型定义一个其他的名字。本人生就略愚,...
  • u012913847
  • u012913847
  • 2014年07月10日 15:38
  • 217

【c/c++】typedef和define

C++编程语言中,有一种专门应对类型定义的用法,叫做C++ typedef。 C++ typedef,顾名思义,为“类型定义”,可以解释为:将一种数据类型定义为某一个标识符,在程序中使用该标识符...
  • lzm18064126848
  • lzm18064126848
  • 2016年04月22日 11:08
  • 310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C&C++中,typedef与#define
举报原因:
原因补充:

(最多只允许输入30个字)