- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
预处理、头文件、位操作
预处理、头文件、位操作;第九章 预处理命令;使用宏定义时,要注意:
一般用大写字母表示“宏名”,以示与变量的
区别。
一般宏定义写在程序的开头,有效范围至文件
结束。
使用宏定义可以提高程序的移植性。;例1 输出杨辉三角形的前 5 行。
main()
{ int a[5][5], i, j;
for(i=0; i5; i++)
{ a[i][i]=1; a[i][0]=1;}
for(i=2; i5; i++)
for(j=1; ji; j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0; i5; i++)
{ for(j=0; j=i; j++)
printf(“%5d”,a[i][j]);
printf(“\n”); } } ;2. 带参数的宏定义的一般形式为:
#define 宏名(参数表) 字符串
如:
#define S(a,b) a*b
area=S(5,2);
宏替换时,a用5替换,b用2替换。
S(5,2)被替换为:5*2;例2 求面积值。
#define PI 3.1415926
#define S(r) PI*r*r
main()
{ float a, area;
a=3.2;
area=S(a);
printf(“area=%f\n”, area);
} ;9.2“文件包含”的处理;注意:
两种形式的差别是:
#include math.h
只按照系统规定的标准方式寻找要包含的文件。
#include “math.h”
首先在当前目录下寻找要包含的文件,若找不到,
再按照标准方式寻找要包含的文件。 ;
2 “文件包含”处理
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C语言提供了#include命令用来实现“文件包含”的操作。其一般形式为
#include “文件名”
或
#include 文件名
;;在编译中,将“包含”以后的文件,如file1.C(图2(C)所示)作为一个源文件单位进行编译。
“文件包含”命令是很有用的,它可以节省程序设计人员的重复劳动。例如,某一单位的人员往往使用一组固定的符号常量(如G=9.81,pi=3.1415926,e=2.718,C=……),可以把这些宏定义命令组成一个文件,然后各人都可以用#include命令将这些符号常量包含到自己所写的源文件中。这样每个人就可以不必重复定义这些符号常量。相当于工业上的标准零件,拿来就用。;注意: 在编译时并不是作为两个文件进行连接的,而是作为一个源程序编译,得到一个目标(.obj)文件。因此被包含的文件也应该是源文件而不应该是目标文件。
这种用在文件头部被包含的文件称为 “头文件”,常以“h”为后缀(h为head(头)的缩写)。当然不用“.h”为后缀,而用“C”为后缀或者没有后缀也是可以的,但用“h”作后缀更能表示此文件的性质。
如果需要修改一些常数,不必修改每个程序,只需修改一个文件(头部文件)即可。但是应当注意,被包含文件修改后,凡包含此文件的所有文件都要全部重新编译。;头文件除了可以包括函数原型和宏定义外,也可以包括结构体类型定义和全局变量定义等。
说明:
(1) 一个include命令只能指定一个被包含文件,如果要包含n个文件,要用n个include命令。
(2) 如果文件1包含文件2,而文件2中要用到文件3的内容,则可在文件1中用两个include命令分别包含文件2和文件3,而且文件3应出现在文件2之前,即在file1.C中定义:
#inClude file3.h“
#inClude file2.h; (3) 在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。例如,上面的问题也可以这样处理,见图3。它的作用与图4所示相同。;; 准方式查找(即再按尖括号的方式查找)。一般说,如果为调用库函数而用#include命令来包含相关的头文件,则用尖括号,以节省查找时间。如果要包含的是用户自己编写的文件(这种文件一般都在当前目录中),一般用双引号。
(5) 被包含文件(file2.h)与其所在的文件(即用#include命令的源文件file1.C),在预编译后已成为同一个文件(而不是两个文件)。因此,如果file2.h中有全局静态变量,它也在file1.C文件中有效,不必用extern声明。
;9.3 条件编译;条件编译命令有以
文档评论(0)