第五章 从问题到程序-再谈函数 云南.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 从问题到程序-再谈函数 云南

预处理头文件 把指定文件内容包含到当前源文件 #include 形式1 #include “myapp.h 形式2 形式1用于包含系统头文件,预处理程序到指定目录找文件(通常指定几个系统文件目录)。 形式2用于包含自己的文件。预处理程序先在源文件所在的目录里找,找不到时再到指定目录中去找。 预编译宏 简单的宏定义 在预编译阶段宏被替换成相应的正文   #define MAXLEN 20 替代正文可以写任何东西。若定义: #define SLD static long double 程序中的: SLD x 2.4, y 9.16; 替换后变成: static long double x 2.4, y 9.16; 带参数的宏定义 #define 宏名字 参数列表 替代正文 如: #define min A,B A B ? A : B …… z min x+y, x*y ; 预处理中将被展开为: z x+y x*y x+y : x*y ; 宏带来的问题 替换后语法错误难以检查 #define MAX 15 int main int a 0 ; if a MAX printf ok ; return 1; 会有意想不到的错误 #define square x x * x 在特定环境下可能出问题,例如: z square x + y ; 展开后是 x+y*x+y 不是我们所想的 (x+y)*(x+y) 正确的定义是 #define square x (x) * (x) 有些标准库“函数”用宏实现。ctype.h里字符类型判断。 宏只有在你非常清晰会不会出问题的时候使用 一般使用宏定义常量 #define MAXLEN 256 //ok 谨慎使用宏定义逻辑,宏展开后的确会比函数快一点点,但是出错时代价巨大 宏定义从一般从定义处起作用直到文件结束。如果需要中途取消此宏的定义,使用#undef #include #define MAX 0 int main int a 1 ; if a MAX printf ok ; #undef MAX if a MAX printf ok ; return 1; 条件编译 例子:你写了一段代码打开操作系统的文件,需要在windows和mac上运行 Win: int openfile(const char* name,int mode) Mac: int fileop(int mode, const char* name ) 方法1,写到两个文件中去,不同平台下选择不同的文件进行编译 非常麻烦,多个平台下需要多个文件 #if WINDOWS openfile ……… #else MAC fileop……… #elif LINUX ……… #endif 如何定义时哪个平台 #define WINDOWS 条件编译的条件应该是整数表达式,0表示条件不成立,否则条件成立。 谓词defined。使用形式: defined 标识符 或 defined 标识符 当标识符是有定义的宏名字时,defined 标识符 得到1,否则得0 #ifdef 标识符 相当于 #if defined 标识符 #ifndef 标识符 相当于 #if !defined 标识符 常量定义 定义“常量”有三种方式: 用enum定义枚举常量, enum MON 1,TUE ….. 用const定义常值变量, const int MON 1; 用预处理命令 “定义常量” #define MON 1 宏定义是简单正文代换,无语法和语义限制。可将标识符代换为任何东西,容易使源程序意义难以理解。 原则是:能用其他方式的地方绝不应该用宏。 枚举常量值为int,只能用于定义int常量。这种常量可用在需要“常量表达式”的地方,如作为case标号,初始化其他枚举常量和外部变量等。 enum MON 1,TUE 2 switch day case MON: printf “…….” ;break; case TUE: printf “…….” ;break; const是变量,但不能赋值。const可为任何类型的。 const不能用于常量表达式。如不能用作case标号,不能用于初始化外部变量或枚举常量。还有其他的要求“常量表达式”的情况,后面介绍。 许多书籍用宏定义的方式定义常量。如写 #define len 20 #define Pi 3.1座机电话号码 建议尽可能用枚举常量和 const。后面程序也这样做 我保留意见

文档评论(0)

5500046 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档