(三) 文件包含
文件包含命令的作用是把指定的文件插入到该命令所处的位置上取代该命令,然后再进行编译处理,相当于将文件的内容“嵌入”到当前的源文件中一起编译。
文件包含命令为#include,有两种命令形式:
①第一种形式:
#include<头文件名>
②第二种形式:
#include“头文件名”
1.文件包含的路径问题
文件包含命令中的头文件名可以写成绝对路径的形式,例如:
#include"C:\DEV\GSL\include\gsl_linalg.h"
#include <C:\DEV\SDL\include\SDL.h>
文件名也可以写成相对路径的形式,例如:
#include <math.h>
#include <zlib\zlib.h>
#include"user.h"
#include"share\a.h"
这时的文件包含命令是相对系统INCLUDE路径或用户路径来查找头文件的。
假设编译器系统INCLUDE路径为“C:\DE\MinG\include",则
#include <user.h> //user.h在C:\DEV\MinGw\include
#include<share\a.h> //a.h 在C:\DEV\MinGw\include\share
假设用户路径为“D:\Devshop",则
#include"user.h" //user.h
在D:\Devshop或C:\DEV\MinGw\include
#include"share\a.h" //a.h 在D:\Devshop\share或C:\DEV\MinGw\include\share
如果在上述路径中找不到头文件,会出现编译错误。
总结"“与<>的区别如下:
1、使用“”是搜索所有目录。
2、使用 <> 是搜索当前目录。
正常情况下,自行定义的头文件应该用”",因为这些文件放在工程目录(也就是编译器的当前目录)下,而不是放在公共头文件目录下,如果用<>则找不到头文件。
而系统提供的头文件,比如库函数的头文件,可以用<>。
2.文件包含的重复包含问题
头文件有时需要避免重复包含(即多次包含),例如一些特定声明不能多次声明,而且重复包含增加了编译时间。这时可以采用以下两个办法之一。
(1)使用条件编译。
(2)使用特殊预处理命令#pragma。
(四) 条件编译
1.#ifdef条件编译命令
测试条件字段是否定义,以此选择参与编译的程序代码段,它有两种命令形式.
①第一种形式:
#ifdef 条件字段
......//程序代码段1
#endif
例: 如果DEBUG已经定义则编译printf语句,否则不编译;
#ifdef DEBUG
printf("x=%d,y=%d,z=%d"\n,x,y,z);
#endif
②第二种形式:
#ifdef 条件字段
......//程序代码段1
#else
......//程序代码段2
#endif
2.#if条件编译命令
根据表达式的值选择参与编译的程序代码,其命令形式为:
#if 常量表达式
......//程序代码段1
#else
......//程序代码段2
#endif
可以使用嵌套的#if条件编译命令#if-#elif,命令形式为:
#if 常量表达式1
......//程序代码段1
#elseif 常量表达式2
.....//程序代码段2
#else
.....//程序代码段3
#endif
[例23.3]场景: 一个皮球从从空中掉落,每次落在地上弹起的高度将会变成原来的1/2.
#include<bits/stdc++.h>
using namespace std;
int main()
{
double sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++) {
sn=sn+2*hn; //第n次落地时共经过的米数
hn=hn/2; //第n次反弹跳起的高度
#ifdef _DEBUG
cout<<"sn="<<sn<<",hn="<<hn<<endl;
#endif
}
cout<<"the total of road is"<<sn<<endl;
cout<<"the tenth is"<<hn<<"meter"<<endl;
return 0;