问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

typedef和define具体的详细区别

发布网友 发布时间:2022-04-02 10:51

我来回答

6个回答

懂视网 时间:2022-04-02 15:13

define与defined的区别有:


1、define用来定义一个常量,常量也是全局范围的。不用管作用域就可以在脚本的任何地方访问常量。一个常量一旦被定义,就不能再改变或者取消定义。

  

  2、defined用来检测常量有没有被定义,若常量存在,则返回true,否则返回false。

  

  

热心网友 时间:2022-04-02 12:21

区别如下:

(1)原理不同

#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

(2)功能不同

typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL, 在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

(3)作用域不同

#define没有作用域的*,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。

(4)对指针的操作不同

#define INTPTR1 int*

typedef int* INTPTR2;

INTPTR1 p1, p2;

INTPTR2 p3, p4;

含义分别为,

声明一个指针变量p1和一个整型变量p2

声明两个指针变量p3、p4

#define INTPTR1 int*

typedef int* INTPTR2;

int a = 1;

int b = 2;

int c = 3;

const INTPTR1 p1 = &a;

const INTPTR2 p2 = &b;

INTPTR2 const p3 = &c;

上述代码中,

const INTPTR1 p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容。

const INTPTR2 p2是一个指针常量,不可使p2再指向其他内容。因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。

INTPTR2 const p3是一个指针常量

扩展资料:

define的作用:

被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。

宏定义的作用范围仅限于当前文件,即file1.c中定义 #define PI 3.14,在file2.c中该宏定义不起作用;通过将#define PI 3.14定义在common.h中,file1.c和file2.c分别#include "common.h"的方式,该宏定义在file1.c和file2.c中都起作用。

在C或C++语言中,“宏”分为有参数和无参数两种。

参考资料:

typedef-百度百科

热心网友 时间:2022-04-02 13:39

区别:

(1)原理不同

#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

(2)功能不同

typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL, 在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

(3)作用域不同

#define没有作用域的*,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。

扩展资料

编辑程序让电脑执行的过程就叫编程 很多软件都可以编程 具有代表性的计算机语言有Java,BASIC C,C++,VB,VF,SQL,网页编程JSP,ASP,PHP ,软件是eclipse,Microsoft Visual Studio,Microsoft Visual Basic,Microsoft SQL Server,等等。Java是目前应用最广泛的编程语言之一,大学中则常常以C语言作为编程的入门语言, BASIC是Beginner's All-purpose symbolic instruction Code(初学者通用符号指令代码)的缩写,是国际上广泛使用的一种计算机高级语言。

参考资料百度百科 电脑编程

热心网友 时间:2022-04-02 15:13

#define是编译预处理指令,在编译预处理时换,不作正确性检查,不论是否正确只进行带入替换,只有在编译已被展开的源程序时才会发现可能的错误并报错。

2.typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。

两者的区别如例:

#define A int *         tepedef int * A;(这是一条语句,要加分号)

两者的作用都是将A代表int *,但是#define在预处理时进行简单的替换,而typedef不是简单替换。

typedef定义的A相当于定义了一个指针指向了int *。而#define定义的A只是进行了替换。

扩展资料:

typedef 有另外一个重要的用途,那就是定义机器无关的类型,例如,你可以定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:

typedef long double REAL;

在不支持 long double 的机器上,该 typedef 看起来会是下面这样:

typedef double REAL;

并且,在连 double 都不支持的机器上,该 typedef 看起来会是这样:

typedef float REAL;

你不用对源代码做任何修改,便可以在每一种平台上编译这个使用 REAL 类型的应用程序。唯一要改的是 typedef 本身。在大多数情况下,甚至这个微小的变动完全都可以通过奇妙的条件编译来自动实现。不是吗? 标准库广泛地使用 typedef 来创建这样的平台无关类型:size_t,ptrdiff
和 fpos_t 就是其中的例子。此外,象 std::string 和 std::ofstream 这样的 typedef
还隐藏了长长的,难以理解的模板特化语法,例如:basic_string,allocator> 和 basic_ofstream>。

参考资料:typedef-百度百科

热心网友 时间:2022-04-02 17:05

typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量, 到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。

在早期的许多C编译器中这条语句是非法的,只是现今的编译器又做了扩充。为了尽可能地兼容,一般都遵循#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不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。

扩展资料:

一、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++)

参考资料:百度百科Typedef

热心网友 时间:2022-04-02 19:13

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不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;

//refer to (xzgyb(老达摩))
#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 不是语句 不要在行末加分号,否则 会连分号一块置换。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 履职尽责一百字演讲稿 - 信息提示 知道名字114能查出电话吗 在吗,知道名字可以查号码吗? 用名字能查出来电话号吗 知到人名字能查出号码吗 同过收件人名字可以查到电话吗 我只知道名字,可以得知电话号码吗? 手机怎么设置成字体带拼音的? define用法问题 新农合生孩子怎么报销? 准备开个网络会议或者电话会议,哪一个比较适合?有文件共享 黑龙江省城镇医疗保险生孩子能报销哪些费用 谁知道中国电信官方网络电话会议平台是什么? 生孩子怎么报销新农合 网络会议和电话会议能不能统一开? 为什么城镇合作医疗生孩子报销企业职工医疗保险不保 合作医疗生孩子可以报多少? no3是什么。。 硝酸盐的检验方法 电脑关机有程序阻止关机,过一会又自动关机了,是怎么回事?长期对电脑各有伤害? win10关机老是有进程阻止,需要手动关闭程序,怎么破? 电脑软件设置自动关机了总是被它阻止,怎么解决 惠普电脑关机说有程序阻止关机,是什么意思呢?求帮忙!谢谢! 小米手环5屏幕坏了换一个多少钱,就是那个玻璃碎了,屏幕使用都没问题? 小米手环5屏幕坏了换一个多少钱,就是那个玻璃碎了,屏幕使用都没问题? win7自动关机的时候有一个程序winime正在阻止强制关机 我的华硕电脑为什么关机时老是出现,正在关机阻止程序请点取消,然后下面会出现强制关机和取消的选项 为什么我的手提电脑自动关机有时不可以? 一关机总是出现有程序未关闭,该怎样解决。 为什么我电脑在关机的时候会出现&quot;程序无法响应&quot;等字样? 小米手环2/小米手环1对比:屏幕之外有何差别 我的电脑关机的时候经常出现程序未响应,我想取消这个提示,让程序直接强制关闭,要怎么设置? 小米手环2实际屏幕多大 电脑关机时候有个应用程序会阻止关机 提示是否关闭软件 关机时总出现结束程序! 小米手环6换外屏多少钱? 有些程序会执行自动关机代码,电脑就关机了,如何阻止电脑自动关机? 小米手环屏幕掉了 电脑在阻止程序时关机