C和指针14章 预处理器笔记

来源:互联网 发布:php查询系统源码 编辑:程序博客网 时间:2024/06/03 07:23

1.#define

#define name stuff

当有name出现时,预处理器就会把它替换成stuff

当stuff非常长的时候,可以分成好几行,除了最后一行外,每行都要加上一个反斜杠

#define DEBUG_PRINT printf( "file %s  line %d :\

                                                 "x=%d, y = %d, z = %d",\

                                                 __FILE__, __LINE__,\

                                                   x,y,z)

当我们在程序里边使用DEBUG时,后边就要添加分号,而定义define那里就不需要分号

2.宏

就是说可以将参数替换到文本中,,这种实现通常称为宏或者宏定义

宏的声明方式

#define name(parameter-list) stuff// 这里左括号必须和name紧邻,不然会被认为是stuff一部分,当宏被调用时,名字后面是由逗号分隔的值的列表,每个与定义时的相对应,使用括号包围,即每个参数对应的实际值都将被替换到stuff中

举个例子

#define SQUARE(x) x*x

SQUARE(5)

然后预处理器就用5*5代替】


2.2宏是不可以出现递归

2.3宏与函数

宏非常频繁地用于简单计算,比如在两个表达式中寻找其中较大或者较小的一个

#define MAX(a, b)  ((a) > (b)?(a):(b) )

2.4带副作用的宏参数

当宏参数在宏定义中出现超过一次时,函数可能会有副作用,比如上边那个换成a++,b++

2.6#undef

用于移除一个宏定义

#undef name

想要在现存的名字重新定义,旧定义必须使用#undef移除

14.3条件编译

使得某条语句或者某组语句进行翻译或者被忽略

语法形式:

#if constant-expression//这个常量表达式由预处理器进行求值;如果值是非0,statements正常编译,否则,预处理就删除他们

statements

#endif


#define DEBUG 1

if DEBUG

printf( "x=%d, y=%d\n", x,y);

#endif

如果要忽略他就直接把符号定义为0;

#if还可以具有可以选的#elif 和#else子句

#if constant-expression

 statements

#elif constant-expression//出现次数不限

  other statements

#else

other statements

#endif

14.4文件包含

14.4.1 函数库文件包含

#include <filename>//以.h结尾

14.4.2本地文件包含

#include "filename"