- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 预处理命令 在C源程序中加入一些“预处理命令” ,以改进程序设计环境,提高编程效率。 预处理命令不是C语言本身的组成部分,不能直接对它们进行编译。 预处理命令在对程序进行编译之前进行“预处理” ,转为C语言的语句。 C提供的预处理功能主要有三种: 宏定义 -- 宏定义命令 文件包含 -- 文件包含命令 条件编译 -- 条件编译命令 命令以符号“#”开头。 9.1 宏定义 不带参数的宏定义 用一个指定的标识符来代表一个字符串,一般形式为 #define 标识符 字符串 如: #define PI 3.1415926 例 #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=3.0/4*PI*r*r*r; printf(l=%10.4f\nS=%10.4f\nv=%10.4f\n,l,s,v); getch(); } 9.1 宏定义 9.1 宏定义 可以用#undef命令终止宏定义的作用域。 9.1 宏定义 在进行宏定义时,可以引用已定义的宏名来层层置换。 9.1 宏定义 对程序中用“”括起来的字符串内的字符,不进行宏置换。 宏定义与定义变量的含义不同,只作字符替换,不分配内存空间。 带参数的宏定义 定义的一般形式为 #define 宏名(参数表) 字符串 如:#define s(a,b) a*b area=s(3,2); 宏展开area=3*2; 说明 #define PI 3.1415926 #define S(r) PI*r*r 当程序area=S(a); 宏展开area=3.1415926*a*a 符合题意 当程序area=S(a+b); 宏展开area=3.1415926*a+b*a+b 不符合题意 主要原因是宏替换时只是简单的字符替换,不是传递参数 解决方法 在带参数宏定义中,在参数外面加上括号 #define S(r) PI*(r)*(r) 宏展开area=3.1415926*(a+b)*(a+b) 带参的宏定义与函数的区别: 函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换。 函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。 对函数中的实参和形参都要定义类型,且类型一致。而宏不存在类型问题。 调用函数只可得到一个返回值,而用宏可以设法得到几个结果。 使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。 宏替换不占运行时间,只占编译时间。而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。 指一个源文件可以将另外一个源文件的全部内容包含进来。 一般形式为 #include “文件名” #include 文件名 可以节省程序设计人员的重复劳动,即多个源程序共同包含一个文件。 常用在文件头部的被包含的文件称为“标题文件”或“头部文件”,常以“.h”为后缀。 被包含的文件内容通常有变量定义、函数声明、宏定义等。 可以包含的文件有系统头文件(.h)、用户定义头文件和源程序。 说明 一个include命令只能指定一个被包含文件,如果要包含n个文件,要用n个include命令。 如果file1.c包含file2.h,而file2.h中要用到file3.h的内容,则: 可在file1.c中定义: #include file3.h (在file2.h 前) #include file2.h 文件包含可嵌套 在file1.c中#include file2.h 在file2.h中#include file3.h 按 #include 标准方式查找 系统到存放C库函数头文件所在的目录中寻找要包含的文件。 如果为调用库函数而用#include命令来包含相关的头文件,则用尖括号,以节省查找时间 按 #include 系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。 如果要包含的是用户自己编写的文件(这种文件一般都在当前目录中),一般用双引号。 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译
文档评论(0)