预处理指令共有三种:
一、预处理指令的执行时刻:
二、预处理指令的特点:
1.预处理指令都是以#号开头;
2.预处理指令的位置可以随便写的;
3.预处理指令的作用域:从编写指令的哪一行代码开始,一直到文件结尾,或者遇到相应的#undef....
三、宏定义(#define)
1.不带参数的宏定义:
#define COUNT 4 // 注意:这里没有分号
.......
#undef COUNT
1.宏名一般用大写,或者以K开头
2.双引号里面的不参与替换; 如:char *name = "COUNT"; // 这里的COUNT不会参与替换
2.带参数的宏定义
#define pingfang(a) ((a) * (a))
1.带参数的宏定义效率比函数高;
2.宏定义为纯粹的文本替换,不会参与运算,所以在定义又参数的宏定义时,参数和结果都要带上小括号(如上)
3.代码练习(注意陷阱)

运行结果:

四、条件编译(#ifdef/#if defined和#ifndef/#if !defined)
1.条件编译
- 符合了某个条件,后面的代码才会进行编译,不符合就不会进行编译,相当于没有写
- 注意:由于条件编译(预处理指令)都在代码编译前执行,条件的判断不能用代码里面的变量等,条件编译一般与宏定义一起使用;
2.定义
#define A 5
#ifdef A
printf("哈哈哈");
#endif
- 注意:只要写了#ifdef后面一定要写#endif,不然后果很严重,(条件若不成立,#ifdef后面的代码相当于全部不参与编译)
3.#if defined和#if !defined
- #if defined (A) == #ifdef A // A是宏名
- #if !defined (A) == #ifndef A
五、文件包含(#include)
1. #include<文件名> 表示:系统自带的文件;
2.#include"文件名" 表示:自定义的文件;
3.不允许循环包含;如:a.h文件中包含b.h而b.h文件中又包含a.h;
4.多文件开发

黑马程序员----预处理指令(宏定义、条件编译、文件包含)
原文:http://www.cnblogs.com/unique-ios/p/4273621.html