第19讲 编译预处理.pptVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
预处理指令 什么是预处理 #define指令 不带参数的宏定义 说明 带参数的宏 C语言预定义的宏 #include指令 条件编译 再谈typedef 上机内容 * C语言是一门编译型的高级语言,但又存在其特殊之处:它提供了编译预处理指令(preprocessor directive,如:#include等)。这些预处理指令以#开头,它本身不是C语言的组成部分,不能直接对它们进行编译。 解释型(sam01) 我们知道程序必须经过编辑?编译?链接,才能生成可执行文件。实际上,在编译之前还需要使用预处理器对预处理指令进行处理,预处理指令的处理才是build程序的第一个步骤。 我们必须在程序进行编译之前,对预处理指令进行“预处理”,经过预处理之后,程序中便不再包含这些预处理指令了,这时就可以由编译器对预处理后的源程序进行的编译,得到目标代码文件。 在本讲中主要讲解以下四种预处理指令: #define指令; C语言预定义的宏(__DATE__等)。 #include指令; 条件编译(#ifdef等); #define指令就是使用一个名字来替换一段文本,我们常常把它称为宏定义/宏替换,其语法如下: #define 名字 替换文本 注意:在使用宏定义后,所有出现名字记号的地方都被替换为替换文本, 宏定义可以带参数也可以不带参数,不带参数的形式如下: #define REAL double #define WRITELN printf(“\n”) #define PI 3.1415926 #define R 2.0 #define AREA PI*R*R 宏名一般大写。 使用宏定义可以减少程序中重复输入的工作量,最主要的是可以做到“一改俱改”。 宏定义仅仅是起置换作用,没有类型检测。 宏定义不是C语句,不用加分号。 宏定义可以带参数,其语法如下: #define 名字(参数表)替换文本 如: #define PI 3.1415926 #define AREA(R) PI*(R)*(R) #define GIRTH(R) 2*PI*(R) main(){ printf(“Area=%f, Girth=%f\n”AREA(3),Girth(3)); } 为什么要有括号? #define宏定义在C语言中几乎无处不在,许多的常量和功能都是通过宏提供的,如: NULL, putchar(), getchar()(stdio.h) RAND_MAX, max(a,b)(stdlib.h) 做课后习题(p.236 - 8.8) 通过这道题中大家一定要记住:宏定义#define就是“拷贝?粘贴”。 下面几个C语言中预定义的宏在程序设计中经常被使用(sam02): __DATE__:当前日期,字符串型; __TIME__:当前时间,字符串型; __LINE__:当前行号,整型; __FILE__ :当前文件,字符串型; #include指令我们常常称之为“文件包含”,它是指在进行预处理时,将一个文件的内容包含到当前文件中来,格式如下: 格式一:#include 文件名 格式二:#include “文件名” 格式1与格式2的区别在于:格式1直接到系统目录中去找,而格式2先到当前目录下去找,然后到系统目录中去找。 一个#include指令只能包含一个文件。如果要包含多个文件必须使用多个#include指令。 #include包含的文件通常是.h类型文件,我们称之为头文件,但也可以是其它类型的文件。 头文件中一般包括如下内容:函数的声明、自己定义的数据类型、常量、条件编译信息等等。 通常源程序的所有内容都要被编译,但有时我们需要有选择的进行编译,这就是条件编译。条件编译有三种格式: #if 常量表达式 程序段1 [#else 程序段2] #endif #ifdef 宏名 程序段1 [#else 程序段2] #endif #ifndef 宏名 程序段1 [#else 程序段2] #endif 条件编译的用法(问题:sam03,解决:sam04)。 在sam03中出现错误的原因是test2.h被包含了两次,从而造成了结构体Birth被定义了两次,所以提示“type redifinition”错误。 我们使用#ifndef…#define…#endif条件编译指令,就可以避免这类错误。条件编译除了用来避免类型重复定义,还常常用来对版本、环境进行判断,从而进行不同的处理。 #define指令还可以是只有名字,没有替换文本,这时用来起

文档评论(0)

word.ppt文档 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档