您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 第5讲+编译预处理与多文件组织(C语言)
第五讲编译预处理与多文件组织1、宏定义2、文件包含与多文件组织3、条件编译*预处理程序对源文件进行第一次处理,是在程序进行编译之前进行的,它处理的是预处理指令。以“#”开头的命令,如#include,#define都是预处理指令。预处理指令以回车结束,而不是“;”。5.1宏定义#define是一种文本替换预处理命令。它有两种表现形式:不带参数的宏、带参数的宏。在C中,用#define定义的不带参数的宏常用来建立常量,例如:#definePIE3.14#define还可以定义带参数的宏。5.1.1不带参数的宏格式:#define宏名(不能包含空格)字符序列在预处理时,用字符序列来直接替换宏名。使用宏定义的几点注意:(1)宏名通常用大写字母,但并非规定的;(2)宏的展开是直接替换,不作任何语法检查;(3)宏定义不是语句,末尾无需加;,如果有分号,则分号也将作为一个字符序列中的一个(4)宏一经定义,就可以用于其他宏的定义;例如:#defineA5#defineBA+5(5)串常量中如果出现与宏名相同的串不会被替换,例如:“aPIEb“(6)宏不能写在函数内部,作用于类同于全局变量,但是可以随时使用#undef终止定义。使用无参宏定义的好处1、提高程序的可读性,如:PIE代替3.142、不仅可以减少程序中重复书写某些字串的工作量,而且修改起来也更方便。5.1.2带参数的宏格式:#define标识符(参数表)字符序列注意:定义时,标识符符与其后的“(”之间不能有空格。例如:#defineA(X)X*X带参数的宏定义与函数的区别1、函数调用时,先对实参表达式求值,再带入相应的形参;而调用带参数的宏只是进行单纯的文本替换。2、函数调用要求实参和形参的数据类型一致,而宏不存在类型问题,在调用时只要代入相应的字符序列即可。3、函数调用是在程序运行时做保护现场、分配内存空间、数据传递等操作,而带参数的宏的扩展是在编译时进行文本替换。4、使用宏替换会产生更长的代码,不过也减少了使用函数调用的额外开销。5.1.3#undef预处理命令宏名的有效范围为#define命令开始到源文件结束。在该范围内可以使用#undef命令来取消定义。5.2.1文件包含预处理命令#include用于包含另一个文件。所谓包含,即指示预处理程序将指定文件的全部内容插到#include命令所在的位置。格式:#include文件名#include“文件名”表示系统默认include路径,“”表示先在当前工作目录下找,找不到再到默认目录下找。包含文件一般以h为后缀.5.2.2多文件组织当程序很大时,就将一个程序分成几个模块,再通过在主程序中#include其他模块组合到一起编译。例子:编写一个头文件,定义几个函数,并在主文件中通过#include包含进来。5.3.1条件编译*#ifdef宏名语句块1#else语句块2#endif#ifdef宏名语句块1#endif5.3.2条件编译*#ifndef宏名语句块1#else语句块2#endif#ifndef宏名语句块1#endif5.3.3条件编译*#if常量表达式语句块1#else语句块2#endif#if常量表达式语句块1#endif
本文标题:第5讲+编译预处理与多文件组织(C语言)
链接地址:https://www.777doc.com/doc-4725063 .html