码迷,mamicode.com
首页 > 其他好文 > 详细

第六章 预处理器

时间:2014-08-09 16:00:18      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:c陷阱与缺陷   笔记   

宏就是文字展开,实际中可以展开写出来发现错误


6.1 不能忽视宏定义中的空格
6.2 宏并不是函数
  宏定义一个函数时,
1、要把每个参数用括号括起来
2、同时也要把整个表达式括起来。
3、要确保宏中的参数没有副作用
     #define  max(a,b) ((a)>(b)?(a):(b))
    max(big,x[i++]),这时++有可能被计算两次,产生了副作用。
宏有可能因为自增减操作产生副作用,也有可能产生非常庞大的表达式。

消除if else的副作用:
#define assert(e) \
             ((void)((e)||_assert_error(__FILE__,__LINE__)))

6.4 宏并不是类型定义
    #define T1 struct foo *
    typedef struct foo *T2

    T1 a,b;   //声明被扩展为struct foo *a,b;  b不是指针 。
    T2 a,b;

第六章 预处理器,布布扣,bubuko.com

第六章 预处理器

标签:c陷阱与缺陷   笔记   

原文地址:http://blog.csdn.net/wwwdongzi/article/details/38456113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!