C语言细节之九:宏与C预处理器

1、多语句宏的书写

     通常的目标是:书写一个像包含一个单独的函数调用语句的宏。

     这意味着:调用者需要提供最终的分号,而宏体则不需要。

     因此宏体不能为简单的括弧包围的复合语句,因为如果这样,调用的时候就会发生语法错(明显是一个单独语句,但却多了一个分号)。每行的最后用\连接

2、sizeof不能用于#if预编译器指令中,因为此时还未对类型名称作解析

3、m4工具是用于多用途的预处理器

4、参数个数可变的宏的书写

    一般用一个单独的用括弧括起来的”参数“定义调用宏,参数在宏扩展的时候成为类似printf()那样的函数的整个参数列表。

    #define DEBUG(args) (printf(“DEBUG: ”), printf arg)

    if(n != 0) DEBUG((“n is %d\n”, n));

    明显缺陷是必须记住使用一对额外的括弧。

posted @ 2010-05-25 00:53  红脸书生  阅读(547)  评论(0编辑  收藏  举报