当前位置:编程学习 > C/C++ >>

#define的一些用法

1.简单的define定义

#define   MAX   1000  

一个简单的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     B(x)         #@x
     
#define     C(x)         #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   ;   )   */
关键是要在每一个换行的时候加上一个 " "   ,""后面不能有空格。

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,