在预处理程序预处理阶段,预处理程序扫描插入 在源程序文件中的预处理命令,并实现预处理命令 规定的功能。经预处理程序处理后的源程序文件, 再交给编译程序作编译处理。 c预处理程序扩充了C语言的处理能力及程序设 计环境,为有效地开发C语言程序提供了便利。 本章将介绍各种预处理命令的功能与使用
6 在预处理程序预处理阶段,预处理程序扫描插入 在源程序文件中的预处理命令,并实现预处理命令 规定的功能。经预处理程序处理后的源程序文件, 再交给编译程序作编译处理。 C预处理程序扩充了C语言的处理能力及程序设 计环境,为有效地开发C语言程序提供了便利。 本章将介绍各种预处理命令的功能与使用
9宏定义 所谓宏定义是指用一个标识符来代替一个字 符序列,因此也称之为标识符替换。 宏定义用预处理命令# define进行。 有两种宏定义形式: 一种为类对象宏( object-like macro),这是无 参数形式的宏定义; 另一种为类函数宏( function-like macro)它是 带参数形式的宏定义
7 9.1 宏定义 所谓宏定义是指用一个标识符来代替一个字 符序列,因此也称之为标识符替换。 宏定义用预处理命令 #define 进行。 有两种宏定义形式: 一种为类对象宏(object-like macro),这是无 参数形式的宏定义; 另一种为类函数宏(function-like macro),它是 带参数形式的宏定义
类对象宏定义 类对象宏定义是一种最简单的宏定义,其一般形 式为: # define宏名宏主体 其中: 宏名( macro name)按标识符规则确定。 习惯上宏名用大写字母表示但这不是规定,可 用小写字母 宏名前后至少有一个空格以便与前面的 define 及其后的字符序列之间隔开
8 1、类对象宏定义 类对象宏定义是一种最简单的宏定义,其一般形 式为: #define 宏名 宏主体 其中: 宏名(macro name)按标识符规则确定。 习惯上宏名用大写字母表示但这不是规定,可 用小写字母。 宏名前后至少有一个空格以便与前面的 define 及其后的字符序列之间隔开
宏主体也称之为替换列表,是语言符号组成的 字符序列(注:可以为空,不是C字符串) 例如: #define four 2*2 类对象宏定义的作用是用宏名这个标识符来表 示随后的宏主体部分给定的字符序列 在预处理程序扫描源文件时,每遇到一个宏名, 便用宏主体部分所指定的字符序列替换(替换过程 称为“宏展开”)。注意:包含在字符串常量中的 宏名和位于注解行中的宏名不被替换牣如:
9 宏主体 也称之为替换列表,是语言符号组成的 字符序列(注:可以为空,不是C字符串)。 例如: #define FOUR 2*2 类对象宏定义的作用是用宏名这个标识符来表 示随后的宏主体部分给定的字符序列。 在预处理程序扫描源文件时,每遇到一个宏名, 便用宏主体部分所指定的字符序列替换(替换过程 称为“宏展开”)。注意:包含在字符串常量中的 宏名和位于注解行中的宏名不被替换!例如:
#define yes 1.o #define tabsize 10n tableTabsizej; man y= YES 将被替换成: 将被替换成: table [100; y=1.0; float y i in table( ABSIZEI字符串中 的YES将不 y=YES 被替换 printf(TYES)%f”,y);
10 #define YES 1.0 #define TABSIZE 100 main ( ) { float y ; int table [ TABSIZE ] ; y = YES ; printf ( "YES = %f " , y ) ; } table[TABSIZE]; 将 被 替 换 成 : table [100] ; y = YES ; 将被替换成: y = 1.0 ; 字符 串中 的 YES将不 被替换