分享
 
 
 

define专题(转贴)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

原文:http://community.csdn.net/Expert/topic/3194/3194845.xml?temp=.2763483

缘起,为什么要使用define

我们在写程序的时候总是需要一些如下的代码

int* p =(int *)malloc(sizeof(int)*100)

for(i=0;i<100;i++)

{

................

}

好,这个代码能正常的运行,但是有一天,突然觉得100实在是有点少,我打算申请1000个int,改成如下的代码

int* p =(int *)malloc(sizeof(int)*1000)

for(i=0;i<1000;i++)

{

................

}

为了让这个代码正常的工作,修改了两次,如果在更多的地方使用了数组的最大值,

那么我可能需要对每一个地方都进行修改,无法想象的恐怖啊,而且,就算是我能修改1000,过了一年之后我都未必知道这个1000对程序意味着什么。对于每一个程序员都会想象,如果有一个类似于ArrayMax之类的东西来代替1000有多好。既增加了程序的可读性,又使得程序易于修改。

写程序的时候,总是需要一些小的函数,例如一个返回两个数中较大值的函数,而众所周知,函数调用会带来比较大的系统开销,但是我们又不能总是去写

int d = x>y ? x:y;

这种语句,一个是些大量重复的代码,另一个是程序很难维护,如果有这样一种模式,他看起来像一个函数,却不会带来函数那样的系统开销,就会使这种情况大大的改观。

让我们先来看看define的基本语法,如下:

1.简单的define定义

#define 1000 MAX

一个简单的max就定义好了,它代表1000,如果在程序里面写

for(i=0;i

{

................

}

编译器在处理这个代码之前会对MAX进行处理替换为1000。

2.define的“函数定义”

define可以像函数那样接受一些参数,如下

#define max(x,y) (x)>(y)?(x):(y);

这个定义就将返回两个数中较大的那个,看到了吗?因为这个“函数”没有类型检查,就好像一个函数模板似的,当然,它绝对没有模板那么安全就是了。可以作为一个简单的模板来使用而已。

3.宏的单行定义

#define A(x) T_##x

#define Bx) #@x

#define Cx) #x

我们假设:x=1,则有:

A(1)------〉T_1

B(1)------〉'1'

C(1)------〉"1"

(这里参考了 hustli的文章)

3.define的多行定义

define可以替代多行的代码,例如MFC中的宏定义(非常的经典,虽然让人看了恶心)

#define MACRO(arg1, arg2) do { /* declarations */ stmt1; stmt2; /* ... */ } while(0) /* (no trailing ; ) */

关键是要在每一个换行的时候加上一个"\" 至此,一个基本的define框架基本完成,我们可以解读大部分的define代码了。我们也可以说,define不过就是一个简单的代码替换的一种体制而已,没有什么神秘的东西。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有