define专题

原创 2004年07月22日 20:21:00

原文: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不过就是一个简单的代码替换的一种体制而已,没有什么神秘的东西。

【简书如何删除专题?】

简书如何删除专题 ? 步骤一:进入专题 步骤二:编辑专题 步骤三:保存更改 步骤四:刷新页面 步骤五:见证奇迹的时刻终...
  • M_agician
  • M_agician
  • 2017年05月22日 00:29
  • 2427

[kuangbin带你飞]专题一 简单搜索

简单搜索
  • hsj970319
  • hsj970319
  • 2017年01月22日 20:23
  • 611

JAVA多线程专题

在讲线程之前首先看一下进程的概念 简单的来说,进程就是处于运行状态中的程序,进程是系统资源进行分配和调度的基本单位,它具有独立性,动态性和并发性 独立性:进程是系统中独立存在的实体,它可以拥有独立的资...
  • liuxins
  • liuxins
  • 2016年04月21日 18:50
  • 1449

织梦自定义专题节点容器模板修正

1.修改添加/编辑专题的模板文件 文件位于 dede\templets下面的 spec_edit.htm 文件,打开文件并找到 “单条记录的模板:” ,在 后面添加下面的代码 节点容...
  • skfzc
  • skfzc
  • 2015年12月11日 15:45
  • 429

[kuangbin带你飞]专题二 搜索进阶 A - Eight

A - Eight Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu...
  • ZZ_AC
  • ZZ_AC
  • 2015年11月17日 16:21
  • 498

【简书如何创建专题?】

简书如何创建专题? 步骤一:新建专题 步骤二:保存更改 步骤三:收录 步骤四:收录文章 步骤五:返回首页,完成创建...
  • M_agician
  • M_agician
  • 2017年05月22日 00:20
  • 1340

kuangbin带你飞 专题一 简单搜索 (题解)

POJ 3279  题意:黑白的板,每次选择一个十字形翻转(十字板内黑白互换,若是边界则不管),求最小将原图变为全白的策略。 题解:枚举第一行翻转情况(二进制),2^c,然后验证,由于第一行确定...
  • Miracle_ma
  • Miracle_ma
  • 2015年06月30日 12:28
  • 1106

[kuangbin带你飞]专题七 线段树 ABCDE 题解,持续更新

【专题网址】点击打开链接 【A HDU 1166】 #include #include #include using namespace std; const int maxn = 50000...
  • just_sort
  • just_sort
  • 2016年05月16日 20:21
  • 319

#define的用法总结

先来讲一讲#define的优点与缺点:[缺点] 宏定义有一些缺点: (1) 无法对宏定义中的变量进行类型检查 此缺点,是相对于const变量来说的 [define与co...
  • Jesons_
  • Jesons_
  • 2016年06月17日 19:16
  • 31400

#define的用法体会

#define 创建一个宏,该宏是标识符或参数化标识符与标记字符串的关联。 在定义宏之后,编译器可用标记字符串替换源文件中标识符的每个匹配项。 语法 #define identifier toke...
  • u013696062
  • u013696062
  • 2014年08月27日 09:26
  • 2035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:define专题
举报原因:
原因补充:

(最多只允许输入30个字)