请问一下,在c语言中 typedef 7 Max;是不是不正确? 就是说宏定义一个常量时只能用define,不能使用typed

 我来答
liph1988
2011-04-09
知道答主
回答量:23
采纳率:0%
帮助的人:14.3万
展开全部
typedef 是为现有类型创建一个新名字。所以typedef 7 Max不正确。
一、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。

注意:两者还有一个行尾;号的区别哦!
百度网友cb8d0e198
2011-04-09 · TA获得超过1198个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:778万
展开全部
typedef用来给变量类型(如int,float等等)取一个别名
define用来给常量取别名,只做字符的替换

因此, typedef 7 Max是不合法,因为7是一个常量,而不是常量类型~~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zero_fn
2011-04-09 · TA获得超过2258个赞
知道小有建树答主
回答量:1173
采纳率:80%
帮助的人:450万
展开全部
#define max 7
const int max =7;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lchn_kyd
2011-04-09 · TA获得超过299个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:295万
展开全部
#define max 7;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式