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

define与typedef

阅读更多

本文引用:http://www.sf.org.cn/article/base/200608/18988.html

一、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。

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

分享到:
评论

相关推荐

    define与typedef数据类型表示的区别.pdf

    "define与typedef数据类型表示的区别" 在C语言编程中,我们经常需要对数据类型进行类型的表示或别名,以便于代码的简洁和书写方便。通常有两种方法可以实现,即define宏和typedef。下面我们将详细介绍这两种方法的...

    define与typedef 区别

    与 `#define` 相比,`typedef` 更安全,因为它的类型系统会确保新类型符合语法规则。同时,`typedef` 的作用范围通常限于它被定义的地方,不像 `#define` 全局有效。 在涉及到指针和常量时,`typedef` 和 `#define`...

    define与typedef区别与联系

    "define与typedef区别与联系" 本文介绍了C语言中两个关键字define和typedef之间的区别以及使用时应注意的问题。 define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,...

    #define VS typedef

    #define VS typedef 在 C 语言中,有两个重要的概念,即 #define 和 typedef,它们都是用于定义符号的,但它们之间有着很大的区别。 首先,让我们来看一下 #define。#define 是一个预处理指令,它是宏定义语句。在...

    #define和typedef的使用

    ### #define 的使用及其特性 ...通过以上的详细介绍,我们可以看出 `#define` 和 `typedef` 在 C 或 C++ 中各自发挥着重要的作用,根据具体的应用场景选择合适的工具可以使程序变得更加高效、易读和易于维护。

    typedef与define的区别

    typedef与define的区别 在C/C++语言中,typedef和define是两个常用的关键字,虽然它们都可以用来定义别名,但是它们的用法和特点却有很大的区别。 一、typedef的用法 typedef是C/C++语言中的一个关键字,用于定义...

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

    在C语言中,`#define` 和 `typedef` 都是用来创建别名的,但它们在使用和效果上有显著的区别。这篇文章将详细讲解这两种方法在互换时的细节,并探讨它们各自的特点。 首先,`#define` 是预处理器指令,它会进行文本...

    define和typedef.md

    ### define和typedef.md #### 两者区别 在C语言中,`typedef` 和 `define` 都被广泛用于简化代码的编写以及提高代码的可读性。然而,它们之间存在着本质的区别,在不同的场景下有着各自的优势和局限性。 ### 1. ...

    typedef和define的区别

    typedef 和 define 的区别 typedef 和 define 是 C/C++ 语言中的两个重要概念,它们都是用于定义标识符或常量的,但它们之间存在着一定的区别。 首先,typedef 用于定义一个标识符或关键字的别名,它是语言编译...

    typedef的用法及与define的区别

    本篇文章将详细介绍`typedef`的四个主要用途,两个需要注意的陷阱,以及它与`#define`的区别。 **`typedef` 的四大用途** 1. **简化复杂类型名**:`typedef` 可用于为复杂的类型定义一个简短易记的名字。例如,当...

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

    "#define, const, typedef 三者联系与区别" #define, const, 和 typedef 是 C programming 语言中的三个基本概念,它们之间存在着紧密的联系和区别。下面我们将详细介绍它们之间的联系和区别。 一、 #define 与 ...

    typedef和#define的用法与区别

    三、typedef与#define的区别 从以上的概念便也能基本清楚,typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也...

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

    `#define`与`typedef`的区别: 1. `#define`是预处理器指令,进行简单的文本替换,不检查语法或类型。例如,`#define PI 3.1415926`,如果误写为`g`,预处理器仍会替换,导致编译错误。 2. `typedef`是在编译阶段...

    typedef用法小结

    一些教材将 typedef 介绍为 #define 的一种形式,但实际上 typedef 和 #define 是两种不同的语句。typedef 是一个声明,用于创建一个别名,而 #define 是一个宏定义,用于替换文本。许多人将 typedef 看作是 #define...

    C语言之typedef的问题.doc

    接下来,让我们讨论一个非常重要的问题:typedef 与结构体结合使用。假设我们使用以下代码定义一个结构体时,编译器报错,为什么呢? ```c typedef struct tagNode{ char *pItem; pNode pNext; } *pNode; ``` 答案...

    typedef的用法

    在了解 typedef 的用法之前,需要了解它与 define 的区别。define 是预处理中的宏定义命令,例如,#define int PARA,表示在源程序中的所有 int 将被 PARA 原样代替。例如,程序中有 int a, b,则在编译前将被替换为...

Global site tag (gtag.js) - Google Analytics