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

原创 2007年09月29日 16:58:00

typedef用法 与#define (有从其他处借鉴和参考)

typedef根据名字就知道是对类的定义。但是值得注意的是,它并不定义新的类型,而是对已有的类型定义一个其他的名字。本人生就略愚,常常搞不清与#define的关系,难道仅仅是所定义得到的新类型所在的位置不同吗?首先我们仔细看看typedef。

一、typedef的用法

人说typedef的使用可以编写更加美观和可读的代码,原因是typedef可以隐藏笨拙的语法结构以及平台相关的数据类型,从而增加可移植性及未来的可维护性。对于typedef的用法,一般如下:原始类型一般紧紧临着typedef,最右边是声明的新的类型名字(其实就是原始类型的一种表示)。例如 typedef int INT;这里声明了一个与int同意的类型INT。如此以来int a;与INT a;并没什么本质的区别。

      typedef还可以掩盖复合类型,例如指针、数组、函数指针。例如,定义char value1[80], value2[80];可以优化一下:typedef char LINE[80]; LINE value1,value2;指针定义:typedef (int*) PINT;PINT szA,szB;等同与int* szA,*szB.对函数指针定义如:typedef void  (*FUNC)(int,int); FUNC pFun1,pFun2;等价于void (*pFun1)(int ,int); void (*pFun2)(int ,int).

     typedef可以定义变相机器无关性代码,例如三台机器对浮点类型的支持分别是long double,double,float。这是为了代码的统一,可以对三种机器分别如下定义:typedef long double REAL; typedef double REAL; typedef float REAL。这样,虽然代码中使用了浮点类型REAL,但并不会给不同类性的机器代理不兼容的问题。
    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。

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

 

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

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

C++ #define用法详解

C++, C,#define,宏,预处理
  • sky1203850702
  • sky1203850702
  • 2014年12月19日 10:24
  • 3195

C++中 #define的用法

C++中 #define的用法  转自:http://www.dingge.com/main/article.asp?id=10今天整理了一些#define的用法,与大家共享!1.简单的define定...
  • lyl_98
  • lyl_98
  • 2006年07月10日 16:59
  • 47133

C++中#define用法

#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时...
  • u012398902
  • u012398902
  • 2014年03月12日 09:55
  • 2078

C++#define的用法(含特殊)

1 无参宏定义 无参宏的宏名后不带参数。 其定义的一般形式为:     #define 标识符 字符串 其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为...
  • chocolate_22
  • chocolate_22
  • 2011年08月26日 10:06
  • 2944

C语言中#define的用法(转)

转自:http://www.dingge.com/main/article.asp?id=10今天整理了一些#define的用法,与大家共享!1.简单的define定义#define MAXTIME ...
  • benny5609
  • benny5609
  • 2008年04月22日 13:17
  • 137676

C/C++基本语法,入门及提高(1)

学习C++可分为4个层次:  第一层次,C++基础:挑选一本入门书籍,如《C++ Primer》、《C++大学教程》、或Stroustrup撰写的经典《C++程序设计语言》或他一年半前的新作《C++...
  • ShareUs
  • ShareUs
  • 2017年05月24日 17:00
  • 680

C和C++语法区别汇总

C和C++是两门不同的语言,在平常使用中经常出现混编的
  • u012234115
  • u012234115
  • 2014年09月25日 12:08
  • 3194

【转】C/C++编译原理

这里并不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解和看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。要明白的几个概念: ...
  • yfmmtz
  • yfmmtz
  • 2015年09月08日 11:35
  • 764

一波面经。。。

美团2015校招面经-软件研发岗 (拿到offer) 一面 上来我问“要自我介绍不?”。面试官一...
  • u012275397
  • u012275397
  • 2015年12月29日 15:12
  • 1458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++中的一些基本语法(define/typedef)
举报原因:
原因补充:

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