c基础回顾

1.在一个宏定义中,编译器可以检测到绝大多数由多余符号所导致的错误。但不幸的是,编译器会将每一卒使用这个宏的地方标记为错误,而不会直接找到错误的根源——宏定义本身,因为宏定义已经被预处理器删除了。

2.带参数的宏,[#define 指令-带参数的宏]  #define 标识符  (x) 替换列表

其中x是标识符 (宏的参数)。这些参数可以在替换列表中根据需要出现任意次。

在宏的名字和左括号之间必须没有空格,如果有空格,预处理器会认为是在定义一个简单的宏,其中(x)是替换列表的一部分。

当预处理器遇到一个带参数的宏,会将定义存储起来以便后面使用。在后面的程序中,如果任何地方出现了标识符(y)格式的宏调用,预处理器会使用替换列表替代,预处理器会使用替换列表替代。

假设定义了下面的宏:

#define MAX(x,y)  ((x)>(y) ? (x) :(y))

#define IS_EVEN(n) ((n)%2==0)

如果在程序中有如下的语句:

i = MAX(j+k,m+n);

if (IS_EVEN(i)) i++;

预处理器会将这些行为替换为:

i = ((j+k)>(m+n)?(j+k):(m-n));

if ((i)%2==0)   i++;

如这个例子所显示的那样,带参数的宏经常用来作为一些简单的函数使用。

带参数的宏可以包含空的参数列表,如下
#define getchar() getc(stdin)

3.#运算符将一个宏的参数转换为字符串字面量,简单的说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号,它仅允许出现在带参数的宏的替换列表中。

posted on 2019-03-16 18:56  xiegangqingnian  阅读(101)  评论(0编辑  收藏  举报

导航