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

#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 specifier inside a function definition。

3)typedef int * int_ptr;

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

#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换

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


这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
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所指的对象。

3)#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
分享到:
评论

相关推荐

    #define和typedef的使用

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

    #define VS typedef

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

    define与typedef 区别

    `#define` 和 `typedef` 是 C/C++ 语言中两种不同的类型定义方式,它们各自有不同的特性和用途。 首先,`#define` 是预处理器指令,它的主要功能是在编译之前进行文本替换。这意味着,当你在代码中使用 `#define` ...

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

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

    typedef与define的区别

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

    typedef和define的区别

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

    typedef和#define的用法与区别

    typedef和#define的用法与区别 一、typedef的用法 在C/C++语言中,typedef是一种语言编译过程中的一部分,它常用来定义一个标识符及关键字的别名。它并不实际分配内存空间,实例像:typedef int INT;typedef int ...

    #define 问题 用法陷阱

    然而,`#define`的不当使用可能会引入一系列的问题和陷阱,本文将深入探讨这些陷阱及其解决方法。 #### 宏定义陷阱 ##### 1. 括号的重要性 当定义一个宏时,如果不正确地使用括号,可能会导致意想不到的结果。...

    #define的使用技巧

    为了避免头文件在同一个编译单元中被多次包含,从而导致编译错误,可以使用预处理指令#ifndef、#define和#endif。例如: ```c #ifndef COMDEF_H #define COMDEF_H // 头文件内容 #endif ``` 这种方法称为头文件保护...

    C语言 #define用法集锦[修正版]

    上述代码的意图是定义两个 `int` 类型的指针 `a` 和 `b`,但由于 `#define` 的工作方式,实际上定义的是一个 `int` 类型指针 `a` 和一个 `int` 类型变量 `b`。正确的做法是使用 `typedef` 语句来定义指针类型: ```...

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

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

    #define用法集锦.doc

    当头文件可能被多次包含时,使用`#ifndef`和`#define`来防止重复定义,如: ```c++ #ifndef __HEADERFILE__ #define __HEADERFILE__ // 头文件内容 #endif ``` 这种方式创建了一个唯一标识符`__HEADERFILE...

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

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

    define和typedef.md

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

    define与typedef区别与联系

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

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

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

    define与typedef

    当涉及到指针时,`define`和`typedef`之间最明显的区别浮现出来。考虑以下示例: ```c #define POINT_D char* typedef char* POINT_T; void main() { POINT_D me1, me2; // 这里的me2将不会被识别为指针 POINT_T...

    哈夫曼树创建(.cpp )

    #define N 50 /*叶子结点数*/ #define M 2*N-1 /*树中结点总数*/ typedef struct { char data[5]; /*结点值*/ int weight; /*权重*/ int parent; /*双亲结点*/ int lchild; /*左孩子结点*/ int rchild; /*右...

    typedef的用法及与define的区别

    在C/C++编程语言中,`typedef` 和 `#define` 都被用来为现有的类型创建新的别名,但它们之间存在着本质的区别。本篇文章将详细介绍`typedef`的四个主要用途,两个需要注意的陷阱,以及它与`#define`的区别。 **`...

Global site tag (gtag.js) - Google Analytics