- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第9章 预处理命令 C语言允许在程序中使用几种特殊的命令(不是C语句),在C编译系统中对程序进行通常的编译之前,先对这些特殊命令进行“预处理”,然后将预处理的结果再进行编译。 预处理功能: 1)宏定义 2)文件包含 3)条件编译 各功能命令前加“#” 9-1 宏定义 一、不带参数的宏定义 用一个指定的标识符代表一个字符串 一般形式: #define 标识符 字符串 如:符号常量: #define PI 3.14159 作用:在编译预处理时,把程序中在该命令 之后的所有PI用3.14159代替 宏名 说明: 1)宏名一般习惯用大写表示 2)用宏名代替字符串,可以减少重复书写 3)宏定义只是“代替”,不作语法检查 4)宏定义不是C语句,后不需加分号 5)#define一般在文件开头,使其在文件内 有效 6)可以用#undef终止宏定义的作用域 7)可以引用已定义的宏名,进行层层置换 8)不置换双引号中与宏名相同的字符串 #define PI 3.1415926 area = PI*r*r; 在宏扩展后成为: area = 3.1315926*r*r; #define PI 3.1415926; area = PI*r*r; 语法错误 因为在宏扩展后成为: area = 3.1315926;*r*r; 二、带参数的宏定义 在进行置换时还要进行参数替换 一般形式: #define 宏名(参数表) 字符串 如:#define S(a,b) a*b ….. area = S(3,2); 预处理 area = 3*2; 例:#define max(a,b) ab?a:b c=max(5,8); 预处理 c=58?5:8; 2)宏与函数不同 函数调用时需分配空间、虚实结合等,而宏只是简单字符串替换 处理不同: 函数—程序运行时处理 宏—预编译时处理,不分配空间,没有值传递 1)简单替换 如:#define S(a,b) a*b area=S(a+b,c); 预处理 area=a+b*c; 原意应为: area=(a+b)*c; 宏定义为: #define S(a,b) (a)*(b) 3)宏名和参数均无类型问题,只是一个 符号 4)使用宏次数多时,宏展开源程序增长, 而函数调用不会使源程序增长 9-2 “文件包含”处理 文件包含是指源文件可以将另外一个源文件的内容包含进来 一般形式: #include “文件名” #include 文件名 作用:预处理时,把“文件名”指定的文件内容复制到本文件,再对合并后的文件进行编译 例: #include stdio.h #include “a.c” 〈〉--按路径查找 “” --先找源文件所在目录,再按路径找 一个include命令只能指定一个被包含文件,如果要包含多个文件,用多个include命令。 Turbo C系统指定的目录,在Options|Directores菜单设定。 9-3 条件编译 一般情况下,源程序中所有行都参加编译,但有时希望对其中部分内容只在满足一定条件时才进行编译,也就是对一部分内容指定编译条件,即条件编译。 一般形式:#ifdef 标识符 程序段1 #else 程序段2 #endif *
文档评论(0)