文档详情

第9章预处理命令要点.ppt

发布:2017-01-19约5.1千字共24页下载文档
文本预览下载声明
9.1 概述 从语法上讲,预处理命令不是C语句,所以每条预处理后面没有“;”号。但是,恰当地使用预处理命令,可以改进程序设计环境,简化程序开发过程,提高程序的可读性和移植性。 ANSI C中主要定义了如下三类预处理命令: 1. 宏定义 2. 文件包含命令 3. 条件编译命令 9.2 深入了解宏 在第3章,我们介绍了常量宏定义的一般格式;在第6章,我们介绍了带参宏的使用。实际上,宏定义分为两种:常量宏定义和带参宏定义。使用了宏定义的源程序在正式编译之前,要进行宏替换,将源程序中出现的所有宏名都用后面定义的字符串进行替换。 例程9-1 常量宏的使用。 源代码: #include”stdio.h” #define PI 3.14 /*定义宏PI*/ #define R 3 /*定义宏R*/ #define C 2*PI*R /*定义宏C*/ #define S PI*R*R /*定义宏S*/ int main(void) { printf(“C=%f,S=%f”,C,S); } 例程9-2 带参宏定义的使用。 源代码: #include”stdio.h” #define PI 3.14 /*定义宏PI*/ #define C(r) 2*PI*r /*定义带参宏C,r是形参*/ #define S(r) PI*r*r /*定义带参宏S,r是形参*/ int main(void) { float r; printf(“请输入圆的半径:\n”); scanf(“%f”,r); printf(“C=%f,S=%f”,C(r),S(r)); /* 带参宏C(r)和S(r)的使用,r是实参*/ } 如果在一个源程序中定义了符号常量,想在使用完后终止该宏定义的使用,可以使用#undef命令。 #undef命令格式如下: #undef 符号常量名称(或编译标志) 作用:取消最近一次#define符号常量名称(或编译标志)命令,使定义的符号常量或编译标志失去作用。 例程9-3 #undef的用法。 #include stdio.h int main(void) { #define S1 123456 /*定义宏S1*/ printf(%s\n,S1); /*使用宏S1*/ #undef S1 /*取消宏S1*/ printf(%s\n,S1); /*错误,S1的定义已经取消*/ { #define S2 abcdef /*定义宏S2*/ printf(%s\n,S2); /*使用宏S2*/ } printf(%s\n,S2); /*使用宏S2*/ return 0; } 编译时输出如下编译信息: error C2065: S1 : undeclared identifier 9.3 条件编译 条件编译命令实际上是用来让程序员告诉编译器,程序中哪些程序段该编译,哪些不要编译。条件编译命令的引入,使得不同硬件平台或软件平台的代码可以同时编写在一个程序文件中,从而方便程序的维护和移植。同时,可以针对具体情况,选择代码段被编译。 1.#ifdef 宏名 程序段1 #else 程序段2 #endif 作用:若宏名已经被#define定义过,则编译程序段1,否则编译程序段2。这条编译命令如同前面学过的if …else …. 语句,是一种典型的条件编译命令。 2.#ifndef 宏名 程序段1 #else 程序段2 #endif 作用:若宏名没有被#define定义过,则编译程序段1,否则编译程序段2。与第一种形式完全相反。 3.#if 表达式 程序段1 #else 程序段2 #endif 作用:若表达式为真,则编译程序段1,否则编译程序段2。此编译命令类似于if …else ….语句。 问题:输入一行字符,可以任选两种输出方式:一种将字符变成其前一个字符输出,一种将字符变成其下一个字符输出。用#define命令来控制是否要变化。例如: #define CHANGE 1 则变成后一个字符输出。若 #define CHANGE 0 则变
显示全部
相似文档