第六章 预处理器

Posted jzssuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章 预处理器相关的知识,希望对你有一定的参考价值。

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



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;

以上是关于第六章 预处理器的主要内容,如果未能解决你的问题,请参考以下文章

第六章 数组和索引器 (6.6 索引器)

第六章:随机化(续2)

第六章:Django 综合篇 - 14:Django 日志

第六章:Django 综合篇 - 14:Django 日志

使用jQuery快速高效制作网页交互特效——06 第六章 jQuery选择器

我的学习之路_第六章_迭代器,泛型