条件编译和文件包含

条件编译

有条件编译指令在,编译一个程序的时候,如果要将一条语句(一组语句)编译或者放弃是很方便的

调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译

常见的条件编译指令:

#if 常量表达式 
	//...
#endif 
//常量表达式由预处理器求值

例如:
在这里插入图片描述

若常量表达式为假,则将条件编译指令中的语句全部删除
若常量表达式为真,则将条件编译指令中的语句全部保留

相当于
在这里插入图片描述
2. 多个分支的条件编译

#if 常量表达式
	//...
#elif 常量表达式
	//...
#else
	//...
#endif

例如:
在这里插入图片描述
内部操作与1中一致

  1. 判断是否被定义
#if defined(symbol)
//或者(执行的指令相同)#ifdef symbol
#endif

#if !defined(symbol)
//或者(执行的指令相同)#ifndef symbol
#endif
  1. #if defined(symbol)(或者 #ifdef symbol)
    表示若define定义了symbol,则保留语句
  2. #if !defined(symbol)(或者 #ifndef symbol)
    表示若define没有定义symbol,则保留语句

例如:
在这里插入图片描述

在这里插入图片描述

  1. 嵌套指令
#if defined(OS_UNIX)
	#ifdef OPTION1
		unix_version_option1();
	#endif
	#ifdef OPTION2
		unix_version_option2();
	#endif
#elif defined(OS_MSDOS)
	#ifdef OPTION2
		msdos_version_option2();
	#endif
#endif

文件包含

#include指令可以使另外一个文件被编译,就像它实际出现于#include指令的地方一样

替换的方式:
预处理器先删除这条指令,并用包含文件的内容替换
这样一个源文件被包含10次,那就实际被编译10次

头文件被包含的方式

  1. 本地文件包含

#include "filename"

查找策略:

  • 先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标准位置查找头文件
  • 如果找不到就提示编译错误

Linux环境的标准头文件的路径:/usr/include

VS环境的标准头文件的路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include ----- 这是VS2013的默认路径

按照自己的安装路径去找

  1. 库文件包含

#include <filename.h>

查找头文件直接去标准路径下去查找,如果找不到就提示编译错误

对于库文件也可以使用 “ ” 的形式包含,但是这样做查找的效率就低些,当然这样也不容易区分是库文件还是本地文件

嵌套文件包含

在这里插入图片描述
对于这样包含头文件,则头文件test.h将重复4次,若test.h头文件内的内容非常大,则会造成许多时间上的浪费

解决问题的方法:
条件编译
在这里插入图片描述
后面的名称可以随便称呼(此案例是按照头文件的名字命名)

分析:
当第一次包含头文件test.h时,会使用#define定义__TEST_H__,再次调用头文件test.h时,会自动放弃

新版机器也支持#pragma once来解决避免头文件的重复引入

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值