处理 SSI 文件时出错
 

MY Home

 
http://www.blog.edu.cn    
 
<<  < 2006 - >  >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
 
 
 
 
 
   
   
   
   
 
  • 日志:32
  • 评论:4
  • 留言:0
  • 访问:
 
  处理 SSI 文件时出错
 
 
 
#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);

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

但是这样做的话存在隐患,例子如下:
#define  Add(a,b)    a+b;
在一般使用的时候是没有问题的,但是如果遇到如:c * Add(a,b) * d的时候就会出现问题,代数式的本意是a+b然后去和c,d相乘,但是因为使用了define(它只是一个简单的替换),所以式子实际上变成了
c*a + b*d

另外举一个例子:
#define pin (int*);
pin a,b;
本意是a和b都是int型指针,但是实际上变成int* a,b;
a是int型指针,而b是int型变量。
这是应该使用typedef来代替define,这样a和b就都是int型指针了。

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 ; ) */
关键是要在每一个换行的时候加上一个"\"

karla 发表于 2005-3-28 16:36:00
 
 

Re:#define的一些用法
 
 

请问一下,"::"是什么用的?

six(游客)发表评论于2006-8-11 10:26:00
个人主页 | 引用 | 返回 | 删除 | 回复
 
 

处理 SSI 文件时出错

发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
    页面数据载入
  © COPYRIGHT 2004 ALL RIGHTS RESERVED http://www.blog.edu.cn
处理 SSI 文件时出错