第15章 编铎预处理 7
第15章 编译预处理
151概述 152宏定义 153文件包含 154条件编译 7
15.1 概 述 15.2 宏 定 义 15.3 文 件 包 含 15.4 条 件 编 译
151概述 预处理功能由预处理命令组成,这些命 令在进行编译功能(包括词法分析、语法分 析、代码生成和优化等)之前进行处理,故 称为“编译预处理”。预处理后的程序再进 行编译、连接,最后形成计算机可以执行的 机器语言程序。 7
15.1 概 述 预处理功能由预处理命令组成,这些命 令在进行编译功能(包括词法分析、语法分 析、代码生成和优化等)之前进行处理,故 称为“编译预处理” 。预处理后的程序再进 行编译、连接,最后形成计算机可以执行的 机器语言程序
C语言提供的编译预处理功能有以下3种: (1)宏定义; (2)文件包含; (3)条件编译。 这些功能分别用宏定义命令、文件包含 命令、条件编译命令来实现。这些预处理命 令不属于C语言中真正的语句,为了与一般C 语言语句相区别,形式上都以“#”开头,预 处理命令后面也不加分号。 7
C语言提供的编译预处理功能有以下3种: (1)宏定义; (2)文件包含; (3)条件编译。 这些功能分别用宏定义命令、文件包含 命令、条件编译命令来实现。这些预处理命 令不属于C语言中真正的语句,为了与一般C 语言语句相区别,形式上都以“#”开头,预 处理命令后面也不加分号
152宏定义 1521不带参数的宏定义 1.不带参数的宏定义 不带参数的宏定义的一般定义形式如下:买 define标识符字符序列 7
15.2 宏 定 义 15.2.1 不带参数的宏定义 1.不带参数的宏定义 不带参数的宏定义的一般定义形式如下: #define标识符 字符序列
例15.1输入半径,求圆的周长、面积和体积。 #define pl 3.1415926 maino file oat,s, rvi printf("input radius scanf("%f", &r); 1=2.0*PIr; s= Padre V=4.0/3.0*PIr*rxr; printf("=%10.4fns=%10.4fnv=%10.4fn",ls,v); 7
例15.1 输入半径,求圆的周长、面积和体积。 #define PI 3.1415926 main() { float l,s,r,v; printf("input radius:"); scanf("%f",&r); l = 2.0*PI*r; s = PI*r*r; v = 4.0/3.0*PI*r*r*r; printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v); }
2.终止宏定义命令 终止宏定义命令的一般形式如下: # undef标识符 undef是终止宏定义的特定字,其作用是从 该命令开始,该标识符(宏名)不再代表相应 的字符序列,即该标识符的作用范围到此处结 束 7
2.终止宏定义命令 终止宏定义命令的一般形式如下: #undef 标识符 undef是终止宏定义的特定字,其作用是从 该命令开始,该标识符(宏名)不再代表相应 的字符序列,即该标识符的作用范围到此处结 束
例如,以下程序段: #define p 100 maino int aPl,b, c, ne/取消宏P,在以下的函数中P不再代表0 int sum(int xIl,int n) 7
例如,以下程序段: #define P 100 main() { int a[P],b,c; ┋ } #undef P /* 取消宏P,在以下的函数中P不再代表100*/ int sum(int x[],int n) { ┋ }
例152输出格式定义为宏的示例。 #define pr printf #define nl int #define macro "%d " #define Macro macro nl #define macro2 macro macron #define macros macroMacromacro nl #define macro4 macro macro macro macron #define s %s maint int a bcd: char stringl="ChINa" a=1;b=2;c=3;d=4 PR(MACROl, a) PR(MACRO2, a, b); PR(MACRO3, a, b, c) PR(MACRO4, a, b, c, d) 7 PR(S,String);
例15.2 输出格式定义为宏的示例。 #definePR printf #define NL "\n" #defineMACRO "%d " #defineMACRO1 MACRO NL #defineMACRO2 MACRO MACRO NL #defineMACRO3 MACRO MACRO MACRO NL #defineMACRO4 MACRO MACRO MACRO MACRO NL #define S "%s" main() { int a,b,c,d; char string[] = "CHINA"; a = 1; b = 2; c = 3; d = 4; PR(MACRO1,a); PR(MACRO2,a,b); PR(MACRO3,a,b,c); PR(MACRO4,a,b,c,d); PR(S,string); }
程序运行结果为: 12 123 1234 CHINA 7
程序运行结果为: 1 1 2 1 2 3 1 2 3 4 CHINA