(二十三) 23.2 文件包含和条件编译

(三) 文件包含

文件包含命令的作用是把指定的文件插入到该命令所处的位置上取代该命令,然后再进行编译处理,相当于将文件的内容“嵌入”到当前的源文件中一起编译。

文件包含命令为#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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值