(1)#define是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。(#define是C语言中定义的语法)
例如
#define PI 3.1415926
程序中的:area=PI*r*r会被替换为3.1415926*r*r,如果把#define语句中的数字9写成了g,预处理也照样带入。
typedef是在编译时处理,所以typedef有类型检查的功能。它在自己的作用域内给一个已经存在的类型一个别名,但是不能在一个函数定义里面使用标识符typedef。(typedef是C++中定义的语法)例如:typedef int INTEGER;这以后就可用INTEGER来代替int作整型变量的类型说明了,如:
INTEGER a,b;
用typedef定义数组、指针、结构等类型将带来很大的方便,不仅使程序书写简单而且使意义更为明确,因而增强了可读性。例如:
typedef int a[10]; 表示a是整型数组类型,数组长度为10。然后就可用a说明变量,
如:a s1,s2;完全等效于: int s1[10],s2[10]
同理typedef void (*p)(void) 表示p是一种指向void型的指针类型!
(2)功能不同
typedef用来定义类型的别名,这些类型不只包含内部类型(int,char等),还包括自定义类型(如struct),可以起到使类型易于记忆的功能。
如: typedef int (*PF) (const char *, const char *);
定义一个指向函数的指针的数据类型PF,其中函数返回值为int,参数为const char *。
typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL;在不支持 long double 的机器上,该 typedef 看起来会是下面这样:typedef double REAL;并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:typedef float REAL;
#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
3、作用域不同
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。而typedef有自己的作用域。
void fun()
{
#define A int
}
void gun()
{
//在这里也可以使用A,因为宏替换没有作用域,
//但如果上面用的是typedef,那这里就不能用A ,不过一般不在函数内使用typedef
}
4、对指针的操作
二者修饰指针类型时,作用不同。
Typedef int * pint;
#define PINT int *
Const pint p;//p不可更改,p指向的内容可以更改,相当于 int * const p;
Const PINT p;//p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;
pint s1, s2; //s1和s2都是int型指针
PINT s3, s4; //相当于int * s3,s4;只有一个是指针。
分享到:
相关推荐
typedef与define的区别 在C/C++语言中,typedef和define是两个常用的关键字,虽然它们都可以用来定义别名,但是它们的用法和特点却有很大的区别。 一、typedef的用法 typedef是C/C++语言中的一个关键字,用于定义...
typedef 和 define 的区别 typedef 和 define 是 C/C++ 语言中的两个重要概念,它们都是用于定义标识符或常量的,但它们之间存在着一定的区别。 首先,typedef 用于定义一个标识符或关键字的别名,它是语言编译...
与 `#define` 相比,`typedef` 更安全,因为它的类型系统会确保新类型符合语法规则。同时,`typedef` 的作用范围通常限于它被定义的地方,不像 `#define` 全局有效。 在涉及到指针和常量时,`typedef` 和 `#define`...
### #define 的使用及其特性 ...通过以上的详细介绍,我们可以看出 `#define` 和 `typedef` 在 C 或 C++ 中各自发挥着重要的作用,根据具体的应用场景选择合适的工具可以使程序变得更加高效、易读和易于维护。
本篇文章将详细介绍`typedef`的四个主要用途,两个需要注意的陷阱,以及它与`#define`的区别。 **`typedef` 的四大用途** 1. **简化复杂类型名**:`typedef` 可用于为复杂的类型定义一个简短易记的名字。例如,当...
"define与typedef区别与联系" 本文介绍了C语言中两个关键字define和typedef之间的区别以及使用时应注意的问题。 define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,...
在 C 语言中,有两个重要的概念,即 #define 和 typedef,它们都是用于定义符号的,但它们之间有着很大的区别。 首先,让我们来看一下 #define。#define 是一个预处理指令,它是宏定义语句。在编译预处理时进行简单...
typedef和#define的用法与区别 一、typedef的用法 在C/C++语言中,typedef是一种语言编译过程中的一部分,它常用来定义一个标识符及关键字的别名。它并不实际分配内存空间,实例像:typedef int INT;typedef int ...
本文将深入探讨`define`与`typedef`的区别,以及为什么在某些情况下应优先选择`typedef`。 #### 一、`define`简介 `define`是C预处理器的一个指令,用于创建宏定义。宏可以是简单的文本替换,也可以用于定义常量或...
"define与typedef数据类型表示的区别" 在C语言编程中,我们经常需要对数据类型进行类型的表示或别名,以便于代码的简洁和书写方便。通常有两种方法可以实现,即define宏和typedef。下面我们将详细介绍这两种方法的...
typedef和define的详细区别 在计算机编程语言中,typedef和#define是两个常用的关键字,都是用于声明和定义类型的,但是它们之间有着很大的区别。 首先,typedef是一种在计算机编程语言中用来声明自定义数据类型,...
### define和typedef.md #### 两者区别 在C语言中,`typedef` 和 `define` 都被广泛用于简化代码的编写以及提高代码的可读性。然而,它们之间存在着本质的区别,在不同的场景下有着各自的优势和局限性。 ### 1. ...
定义的类型不同,typedef定义的是类型,而#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。 书写方式不同,typedef是定义类型在前,定义对象在后,而#define正好相反 typedef unsigned char u8; ...
"#define, const, typedef 三者联系与区别" #define, const, 和 typedef 是 C programming 语言中的三个基本概念,它们之间存在着紧密的联系和区别。下面我们将详细介绍它们之间的联系和区别。 一、 #define 与 ...
在了解 typedef 的用法之前,需要了解它与 define 的区别。define 是预处理中的宏定义命令,例如,#define int PARA,表示在源程序中的所有 int 将被 PARA 原样代替。例如,程序中有 int a, b,则在编译前将被替换为...
一些教材将 typedef 介绍为 #define 的一种形式,但实际上 typedef 和 #define 是两种不同的语句。typedef 是一个声明,用于创建一个别名,而 #define 是一个宏定义,用于替换文本。许多人将 typedef 看作是 #define...
接下来,让我们讨论一个非常重要的问题:typedef 与结构体结合使用。假设我们使用以下代码定义一个结构体时,编译器报错,为什么呢? ```c typedef struct tagNode{ char *pItem; pNode pNext; } *pNode; ``` 答案...
在C语言中,`#define` 和 `typedef` 都是用来创建别名的,但它们在使用和效果上有显著的区别。这篇文章将详细讲解这两种方法在互换时的细节,并探讨它们各自的特点。 首先,`#define` 是预处理器指令,它会进行文本...
详解typedef四用途与两陷阱 typedef语法 声明一个别名 区别于#define思维与用法 详细解析了typedef的四个重要用途与两个误区