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"
- C和指针14章 预处理器笔记
- 《C和指针》第14章 预处理器
- C和指针读书笔记-第14章(预处理器)
- 读书:C和指针14章-预处理器
- 【C】【笔记】《C和指针》第10章 结构和联合 第11章 动态内存分配 第12章 使用结构和指针 第13章 高级指针话题 第14章预处理器
- C和指针读书笔记——预处理器
- C预处理器和C库-学习笔记
- C和指针之预处理器之普通c/c++文件的编译过程
- 《c和指针》笔记
- C和指针笔记
- 《C和指针》笔记
- c 和 指针(笔记)
- C和指针笔记
- 《C和指针》笔记
- 《C和指针》笔记
- C和指针笔记
- 第十六章 C预处理器和C库
- C学习笔记(十一)C预处理器和C库
- ios解决屏幕适配,字体适配,一个小工具就够了!
- POJ 2739 Sum of Consecutive Prime Numbers
- android组件化开发
- Android 6.0 权限
- 链表拼接
- C和指针14章 预处理器笔记
- Spring中ClassPathXmlApplicationContext和ApplicationContext 的简单使用
- Java三大器之拦截器(Interceptor)的实现原理及代码示例
- [LintCode 124] 最长连续序列(Python)
- 数据结构改变
- [C专家]分析C语言声明——关于联合
- EventBus activity收不到post的消息原因分析
- VMBox挂载共享文件时可能出现的问题以及对应的解决办法
- MFC 资源脚本问题:fatal error CVT1100: 资源重复。类型: AFX DIALOG LAYOUT