#define和typedef的区别

typedef和#define都是替一个对象取一个别名,来增强程序的可读性,但是它们有以下几个区别

1. 原理不同

   (1)#define是C语言中定义的语法,它是预处理指令,在预处理的时候进行简单的字符串替换,不作任何的正确性的检查,不管是否正确照样带入替换,只有在编译的时候才会发现错误并报错

   (2)typedef是关键字,在编译的时候处理,所以typedef是有类型检查的功能,在作用域内给类型定一个别名

2. 功能不同。

   (1)typedef用来定义类型的别名,这些类型包括内置的int、char等还包括struct等

   (2)#define不只是可以为类型取别名,还可以定义常量、变量等

3. 作用域不同

   (1)#define是没有作用域的,只要是之前预定义过的宏,在以后的程序中都可以使用,比如

            void Fun(void){

                    #define N 100 

            }

            那么这个宏在后面所有地方都可以用,宏是没有作用域的

   (2)typedef有自己的作用域,不过一般不在函数内部使用typedef

4. 对指针的操作不同

    看以下这段代码

    #define INTPTR1 int*

    typedef int* INFPTR2; 

    INTPTR1 p1, p2;

    INTPTR2 p3,p4;

  (1)INTPTR1 p1, p2; 宏替换之后变成int *p1, p2;变成声明一个整型指针p1,和整型变量p2

  (2)INTPTR2 p3,p4; 这边则是定义了两个整型指针p3和p4, INTPTR2为int *的别名

    从上面可以看出,进行宏替换只是单纯的字符串替换。而typedef为某一种类型定义别名带有一定的含义

时间: 2024-09-28 18:40:30

#define和typedef的区别的相关文章

#define和typedef的简单区别及使用

/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进

c c++-关于#define和typedef的使用?

问题描述 关于#define和typedef的使用? 最近在看微软某个SDK源码,看到一段宏定义之类的,实在没看懂,这段代码如下:#define CREATE_BRICK_SOURCE(NAME TPL_BRICK CONTEXT NEXT_BRICK) typedef TPL_BRICKC_##NAME; typedef __C_##NAME *S_##NAME; S_##NAME NAME(aligned_new(C_##NAME CONTEXT NEXT_BRICK)); 求大神解释解释该

php中define()与const的区别详解

define()与const的区别: define() 在执行期定义常量,而 const 在编译期定义常量.这样 const 就有轻微的速度优势(即性能稍微好点),但不值得考虑这个问题,除非你在构建大高并发系统. define() 将常量放入全局作用域,即使在命名空间中使用define方法定义常量也属于全局作用域的.不能使用 define() 定义类常量(类常量使用const定义),命名空间作用域内的常量使用const定义如: namespace const ABC='100′;. define

typedef区别-谁能透彻分析这两个typedef的区别

问题描述 谁能透彻分析这两个typedef的区别 typedef std::function ccHttpRequestCallback; typedef void (cocos2d::Ref::*SEL_HttpResponse)(HttpClient* client, HttpResponse* response); 解决方案 一个是简单的类型 typedef 另一个是函数指针的 typedef 这都是 typedef 的基本用法,其实说简单的些就是搞清楚要将什么替换为什么. 如,后续代码中

typedef和#define的用法以及区别_C 语言

一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有"非直观性"等缺点. 二.#define的用法 #define为一宏定义语句,通常用它来定义常量(包括无参

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

复制代码 代码如下: #include <stdio.h>/*<---------           #define    string    char *            ---->*/typedef   char *   string;       int main(void){   string   a[] = {"I", "like", "to", "fight,"},   b[] =

深入分析php中const和define定义常量的区别

大家都知道define是定义常量的,如果在类中定义常量呢?当然不能用define,而用const,如下例:  代码如下 复制代码 <?php define('PHP', 'I love PHP'); // 在类外面通常这样定义常量 if (defined('PHP')) {     echo 'PHP is defined!'; }   class MyClass {     // 常量的值将始终保持不变.在定义和使用常量的时候不需要使用$符号     const CONSTANT = 'con

#define用法总结

刚开始接触VC++的同学们,估计对这个东西有这莫大的恐惧.这个经常写在添加头文件的地方的奇怪语句. 如果看过mfc那么,那么拿出一些application framework里面的宏,估计会吓死一片.说了这么多只是想说,不明白其用法的人很害怕,但要是知道它,熟悉它,那么你会觉得它很美妙.   进入正题: #define的个用法:   1:#define MAX  0x18 第一个用法意义就在于定义标识符,这个比较常见而且也比较容易理解.将MAX的地方看做是0x18.   2:#define af

指针-数据结构 Triplet &amp;amp;amp;T 中的&amp;amp;amp;是什么意思

问题描述 数据结构 Triplet &T 中的&是什么意思 10C #include ""Common.h""#define ElemType int typedef ElemType * Triplet;//由InitTriplet分配3个元素存储空间 //--------------基本操作的函数,及说明----------------Status InitTriplet(Triplet &T ElemType v1 ElemType v