以下几点只是我自己的笔记加上一点体会, 内容比较简单。具体的使用技巧以后再举例说明。
1、C、C++程序中允许定义一些命令, 这些命令可以在编译之前进行处理,这些命令成为预处理命令
2、预处理命令以#开头,包括#include、#define、#undef、 #if#else #endif、#ifdef、#ifndef
3、按功能的不同又被分为:宏定义、文件包含处理、条件编译三种
4、预处理的目的:提高编程效率,处理跨平台问题等
5、预处理操作实际上就是替换…,所以加括号就是一个很好的习惯了,如果没括号,优先级的问题将是一个大问题。
6、注意:末尾不加分号,它不是C语句,也不是C语法,只是预处理程序支持。
7、预处理程序支持带参数的宏替换操作(挺强大的,我们自己也可以设计一个宏替换的简单算法)
eg: #define S(a,b) (a*b) 括号里面的就是参数了。
关于带参数的宏的理解:首先,宏的标志就是S,跟参数无关,它应该具有唯一性,另外,参数是从左到右进行替换。比如上例中S(2,3) 就是根据标号S,找到宏定义,由(,)确定参数,然后从左到右,2替换a,3替换b,用字符串处理函数就可以实现了。
8、宏定义的各部分使用空格进行分割的,所以,不要随便添加空格了 ^^,另外一个宏只能写在一行上,当然行尾加\是可行的。
9、文件包含:把被包含的文件全部拷贝到当前文件中。然后就可以使用被包含的文件中的内容了。此时就不需要用extern声明了。 注意相互包含的问题,即 A包含了B之后,就不要在B里面包含A了,如果真的需要的化,就用条件预编译,或者C++中的#Program Once。
10、#include "" 与 <> 的区别, <> 通常用于标准库文件,而 "" 用于用户自定义文件。
11、条件编译:#if(#ifdef\#ifndef) #else #endif //#if 后面跟逻辑值, #ifdef、#ifndef 之后通常会定义一个作为条件的宏。