预处理
预处理命令
预处理定义
1,所谓预处理是指进行编译的第一遍扫描之前所做的工作,是C语言中的一个重要功能,由预处理程序负责完成。
2,C语言提供了多种预处理功能,如宏定义,文件包含,条件编译等,
3,在C语言源程序中允许一个标识符来表示一个字符串,称为“宏”;被定义为“宏”的标识符称为”宏名”。在编译程
序中,对程序所有出现的“宏名”,都用宏定义中的字符取代换,又被称为“宏替代”或“宏代换”。
4,宏定义是有源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
5,在C语言中,宏分为有参数和无参数两种。
无参数宏
无参数宏定义的一般形式为:
1, #define 标示字符串
注意:“#”代表是编译预处理命令,define是宏处理的关键词,标识符是宏名。字符串是宏名所代替的内容,也可以是常
数,表达式等。
例:
2,在前面符号常量的定义就是一种无参数定义,此外,常对程序中反复使用的表达式进行宏定义。
宏定义是用宏名表示一个字符串,在宏展开时又以该字符串取代宏,是一种简单的替换。
习惯上宏名用大写字母表示,以便区别变量。但也允许小写字母。
例如:
#define M (y*y+3*y)
它的作用就是指定标识符M来替代表达式(y*y+3*y)。在编写程序时所有表达式可被标识符所代替。在源程序做编译时,将
先由预处理进行宏代换,然后再进行编译。
例:
带参数宏
1,带参数宏定义中,宏名和形参之间不能有空格出现。
2,在带参宏定义中,形参不分配内存单元,因此,不作为类型主义,宏调用参数的实参有具体的值。去代替形参,形参和
实参是两个不同的量。在带参宏中,只是符号代换,不存在值传递。
3,在宏定义中,形参是标识符,而宏调用中的实参可以是表达式。
4,在宏定义中,字符串内的形参通常要用括号括起来,以避免出错。
文件包含
1,文件包含命令行的一般形式是:
#incude “文件名”
2,文件包命令功能是指定文件插入该位置取代该命令行,从而把指定文件和当前源文件程序连成一个源文件。
3,在程序设计中,一个大的程序可以分为多个模块,有些公用符号常量可单独组成一个文件,避免每个文件开头书写公用
量,从而节省时间,减少出错。
4,包含命令中的文件可以用双引号括起来,也可以用尖括号括起来,例如以下都是允许的:
#include "stadio.h”
#include <math.h>
5,一个include命令只能指定一个被包文件,若有多个文件包括,需要用多个include命令。
6,文件包允许被嵌套。一个被包含的文件中又可以包含另一个文件。