Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1304
  • 博文数量: 2
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-27 12:49
文章分类
文章存档

2012年(2)

我的朋友
最近访客

分类:

2012-04-13 16:37:57

原文地址:define 使用大全 作者:tastesweet

  1. #define中的#与##
    "#"符号,在宏定义中是将符号转换成字符串,"##"是连接字符串。
    例如:
    1. #define GA(n) printf(" "#n" = %d \n",num##n);

    2. int main(int argc,char** argv)
    3. {
    4.    int num9 = 11;
    5.    GA(9)
    6.    return 0;
    7. }
    运行结果为:   9=10
    其中" "#n" =%d \n",被预处理器处理为"9=%d \n",
    而num##n被处理为num9。


  2. 无参数的宏定义
    无参数的宏定义,只是简单的字符串替换,但需要考虑边际效应。
    例如:
    1. #define GA printf(" A")
    2. #define GB printf(" B");

    3. int main(int argc,char** argv)
    4. {
    5.   GA; //需要加";"
    6.   GB  //不需要加";"
    7.   return 0;
    8. }
    上边的程序是正确的,执行的结果是:A B,无符号的宏定义只是简单的字符替换。

  3. 带参数的宏定义

    参数可以被使用,但需要特别注意,宏在预处理器处理时,没有语法检测,只是字符串替换,所有没有正确使用宏,会导致编译错误。

    例如:

    1. #define ADD(a,b) a+b

    2. int main(int argc,char** argv)
    3. {
    4.    printf("ADD = %d \n",ADD(1,2));
    5.    return 0;
    6. }
    如果将printf("ADD = %d \n",ADD(1,2))改为printf("ADD = %d \n",ADD("x",2))会导致编译失败.
  4. 宏定义的优缺点
    优点很多,代码更整洁,易于修改,缺点更明显,边际效应。
阅读(239) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux运维工程师面试题

给主人留下些什么吧!~~