《C语言教程》课程教学资源(教案讲义)第九章 编译预处理

第九章编译预处理 预处理功能主要有三种:宏定义;文件包含;条件编译 9.1宏替换(宏定义) 91.1不带参数的宏定义 1.# define指令:用一个指定的标识符来代表一个字符串。 2.定义的一般形式是 # define宏名字符串(或数值) 由# define指令定义后,在程序中每次遇到该宏名时就用所 定义的字符串(或数值代替它 W1: #define Pl3. 14159265 #define radius 2.0 double circum return(2.0*PI"RADIUS double areao i return(PI RADIUS"RADIUS) main( i printf("l=%ofn"circum) printf("s%lf\n", areao) 注意 ①在宏定义的后面没有";"(因为它不是语句) ②习惯上用大写字符作为宏名,与变量名相区别,而且常放在程 序开头。 ③使用宏名代替一个字符串,可以减少程序中重复书写某些字 符串的工作量 #define array size 1000 int arraylattay size ④可以用# undef命令终止宏定义的作用域 #define 8 maino #undefg fIo
第九章 编译预处理 预处理功能主要有三种:宏定义;文件包含;条件编译。 9.1 宏替换(宏定义) 9.1.1 不带参数的宏定义 1. #define 指令 :用一个指定的标识符来代表一个字符串。 2. 定义的一般形式是: #define 宏名 字符串(或数值) 由#define 指令定义后, 在程序中每次遇到该宏名时就用所 定义的字符串(或数值)代替它。 例 1:#define PI 3.14159265 #define RADIUS 2.0 double circum() { return(2.0*PI*RADIUS); } double area() { return(PI*RADIUS*RADIUS); } main() { printf("L=%lf\n",circum()); printf("S=%lf\n",area()); } 注意: ①在宏定义的后面没有";"(因为它不是语句) ②习惯上用大写字符作为宏名, 与变量名相区别,而且常放在程 序开头。 ③使用宏名代替一个字符串,可以减少程序中重复书写某些字 符串的工作量: #define array_size 1000 int array[attay_size]; ④可以用#undef 命令终止宏定义的作用域。 #define G 9.8 main() { } #undef G f1( )

⑤在进行宏定义时,可以引用已定义的宠名,可以层层置换 例:# define r3.0 #define pl3. 1415926 #define l 2*pir #define s pir*r main( printf( L=%fns=%fn",L, S); ⑥在程序中用双引号括起来的字符串骨近字符,与宏名相同 不进行置换,作为字符串。 91.2带参数的宏定义 1.# define宏名(参数)字符串 不是进行简单的字符串替换,还要进行参数替换。 例2 #define MAX(x, y)((x)>(y)?():(y) maino nt=10,=15 A printf("The Maxmum is %d", MAX(,D); 展开相当于: printf("The Maxmum is %d", ((1)>(j)?(1:j)); 9.2.“文件包含”处里(# include) 1.定义:# include指令的作用是指示编译器将该指令所指出 的另一个源文件嵌入# include指令所在的程序中其一般形式为 # include 或# include“文件名” 第一种形式:系统到系统标准目录中搜索该文件 第二种形式:首先到当前目录中搜索该文件,如找不到则到系统标 准目录中去搜索该文件 例3:输入一个句子,统计单词个数。 首先编写一个头文件: /hong. h*/ #include #define true 1
…….. ⑤在进行宏定义时,可以引用已定义的宠名,可以层层置换。 例: #define R 3.0 #define PI 3.1415926 #define L 2*PI*R #define S PI*R*R main() { printf(“L=%f\ns=%f\n”,L,S); } ⑥在程序中用双引号括起来的字符串骨近字符,与宏名相同, 不进行置换,作为字符串。 9.1.2 带参数的宏定义 1.# define 宏名(参数) 字符串 不是进行简单的字符串替换,还要进行参数替换。 例 2: #define MAX(x, y) ((x)>(y))?(x):(y) main() { int i=10, j=15; printf("The Maxmum is %d", MAX(i, j)); } 展开相当于: printf("The Maxmum is %d", ((i)>(j))?(i):(j)); 9.2.“文件包含”处里(#include) 1.定义: #include 指令的作用是指示编译器将该指令所指出 的另一个源文件嵌入#include 指令所在的程序中.其一般形式为: #include 或#include “文件名” 第一种形式:系统到系统标准目录中搜索该文件 第二种形式:首先到当前目录中搜索该文件,如找不到则到系统标 准目录中去搜索该文件。 例 3: 输入一个句子,统计单词个数。 首先编写一个头文件: /*hong.h*/ #include #define TRUE 1

#define false 然后,编写程序,其中 包含该头文件: # include a:thong maino Bint in=0 char str[801 gets(str) for(i=l; stri=0; 1++) if (iswhite(str=TRUE) n++ printf( has %d words",n) nt iswhite(char c) {if(c="|c=="nl|c="t) return TRUE return FALse; 93.条件编译 1.定义:当满足某条件时对一组语句进行编译,而当条件不满 足时则编译另一组语句 2.格式 # ifdef标识符 语句段; #else 语句段 #endif 含义是:当标识符被定义过(用# define定义),则编译#f到#lse 之间的程序段;否则编译#else到# endif之间的程序段 3格式二: # ifndef标识符 语句段 #else 语句段; #endif 4格式三: #if表达式 语句段
#define FALSE 0 然后,编写程序,其中 包含该头文件: #include "a:\hong.h" main() {int i,n=0; char str[80]; gets(str); for(i=1;str[i]!='\0';i++) if (iswhite(str[i])==TRUE) n++; printf(“has %d words",n); } int iswhite(char c) { if(c==''||c=='\n'||c=='\t') return TRUE; else return FALSE;} 9.3. 条件编译 1.定义:当满足某条件时对一组语句进行编译,而当条件不满 足时则编译另一组语句。 2.格式一: #ifdef 标识符 语句段; #else 语句段; #endif 含义是: 当标识符被定义过(用#define 定义), 则编译#if 到#else 之间的程序段; 否则编译#else 到#endif 之间的程序段。 3.格式二: #ifndef 标识符 语句段; #else 语句段; #endif 4.格式三: #if 表达式 语句段;

#else 语句段 #endif 它的作用是:当指定的表达式值为非零值,则编译#到#ekse之 间的程序段;否则编译#else到# endif之间的程序段 例4 void s sort(inta[, int n) fint i, j, k, t for(=0;<n-1;H++) ik=l for(=l+l: j<n, j++) #ifdefascend if(alka[kD #else if(alPa[kD #endif k=j a[k]; a[kF=all 如果在主程序中定义了宏 ASCEND则排序时按升序排列,否则 按降序排列
#else 语句段; #endif 它的作用是:当指定的表达式值为非零值,则编译#if 到#else 之 间的程序段; 否则编译#else 到#endif 之间的程序段。 例 4: void s_sort(int a[],int n) {int i,j,k,t; for(I=0;Ia[k]) #endif k=j; t=a[k]; a[k]=a[I]; a[I]=t; } } 如果在主程序中定义了宏 ASCEND 则排序时按升序排列,否则 按降序排列
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C语言教程》课程教学资源(教案讲义)第八章 函数.doc
- 《C语言教程》课程教学资源(教案讲义)第五章 顺序结构程序设计.doc
- 《C语言教程》课程教学资源(教案讲义)第二章 C语言程序设计概述.doc
- 《C语言教程》课程教学资源(教案讲义)第三章 数据描述与基本操作.doc
- 《C语言教程》课程教学资源(教案讲义)第七章 数组.doc
- 《C语言教程》课程教学资源(教案讲义)第一章 计算机程序高设计与算法.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第四节 Serv-U用户属性之“General”(常用).doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第六节 Serv-U用户属性之完结.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第五节 Serv-U用户属性之“Dir Access”(目录存取属性).doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第二节 Serv-U 管理器.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第三节 Serv-U用户属性之“Account”(帐号).doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)第一节 Serv-U的安装和基本设置.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)Serv-U ftp 服务器的进阶管理.doc
- 《FTP服务器端软件Serv-U教程》教学资源(讲义)FTP服务器端软件Serv-U教程.doc
- 北京大学:《ASP程序设计》 第一章 ASP简介.ppt
- 《NT组网》 第一讲 网络基础.ppt
- 《数据结构-C语言描述》 第十章 文件.ppt
- 《数据结构-C语言描述》 第八章 查找.ppt
- 《数据结构-C语言描述》 第九章 排序.ppt
- 《数据结构-C语言描述》 第七章 图.ppt
- 《C语言教程》课程教学资源(教案讲义)第六章 循环控制设计.doc
- 《C语言教程》课程教学资源(教案讲义)第十一章 结构和共同体.doc
- 《C语言教程》课程教学资源(教案讲义)第十三章 文件.doc
- 《C语言教程》课程教学资源(教案讲义)第十章 指针.doc
- 《C语言教程》课程教学资源(教案讲义)程序设计及应用实例(共十一章).pdf
- 《DWDM培训原理》教材PPT课件讲解.doc
- 《C语言教程》课程PPT教学课件:指针与函数.ppt
- 《C语言教程》课程PPT教学课件:选择结构程序设计.ppt
- 《C语言教程》课程PPT教学课件:C程序设计For循环.ppt
- 《C语言教程》课程PPT教学课件:数组与指针.ppt
- 《C语言教程》课程PPT教学课件:多维数组与指针.ppt
- 《C语言教程》课程PPT教学课件:数组与指针的自定义.ppt
- 《C语言教程》课程PPT教学课件:指针的各种定义.ppt
- 《C语言教程》课程PPT教学课件:指针作为函数参数.ppt
- 《C语言教程》课程PPT教学课件:指针是C语言中重要的概念.ppt
- 《C语言教程》课程PPT教学课件:循环控制.ppt
- 《C语言教程》课程PPT教学课件:二维数组的定义.ppt
- 《C语言教程》课程PPT教学课件:变量存储类别.ppt
- 《C语言教程》课程PPT教学课件:程序设计中的函数.ppt
- 《C语言教程》课程PPT教学课件:预处理命令.ppt