将是最后一次循环。计算表达式的值为 5*6 等于 30。i 值再自增 1 变为 6,不再满足循环条
件,停止循环。
从以上分析可以看出函数调用和宏调用二者在形式上相似,在本质上是完全不同的。
6. 宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。看下
面的例子。
【例 9.11】
#define SSSV(s1,s2,s3,v) s1=l*w;s2=l*h;s3=w*h;v=w*l*h;
main(){
int l=3,w=4,h=5,sa,sb,sc,vv;
SSSV(sa,sb,sc,vv);
printf("sa=%d\nsb=%d\nsc=%d\nvv=%d\n",sa,sb,sc,vv);
}
程序第一行为宏定义,用宏名 SSSV 表示 4 个赋值语句,4 个形参分别为 4 个赋值符左部
的变量。在宏调用时,把 4 个语句展开并用实参代替形参。使计算结果送入实参之中。
9.3 文件包含
文件包含是 C 预处理程序的另一个重要功能。
文件包含命令行的一般形式为:
#include"文件名"
在前面我们已多次用此命令包含过库函数的头文件。例如:
#include"stdio.h"
#include"math.h"
文件包含命令的功能是把指定的文件chā入该命令行位置取代该命令行,从而把指定的文件和
当前的源程序文件连成一个源文件。
在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员
分别编程。有些公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含
命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时
间,并减少出错。
对文件包含命令还要说明以下几点:
1. 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法
都是允许的:
#include"stdio.h"
#include
但是这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找(包含目录是
由用户在设置环境时设置的),而不在源文件目录去查找;
使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查
找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。
2. 一个 include 命令只能指定一个被包含文件,若有多个文件要包含,则需用多个
include 命令。
3. 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。
9.4 条件编译
预处理程序提供了条件编译的功能。可以按不同的条件去编译不同的程序部分,因而产
生不同的目标代码文件。这对于程序的移植和调试是很有用的。
条件编译有三种形式,下面分别介绍:
1. 第一种形式: