Daily-C-Study(17):C语言文件包含#include

Daily-C-Study(17):C语言文件包含#include

成于坚持,败于止步

文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。C语言提供#include 命令来实现文件包含的操作,它实际是宏替换的延伸,有两种格式:

一、#include

其中,filename 为要包含的文件名称,用尖括号括起来,也称为头文件,表示预处理到系统规定的路径中去获得这个文件(即C 编译系统所提供的并存放在指定的子目录下的头文件)。找到文件后,用文件内容替换该语句。

2、#include “filename”

其中,filename 为要包含的文件名称。双引号表示预处理应在当前目录中查找文件名为filename 的文件,若没有找到,则按系统指定的路径信息,搜索其他目录。找到文件后,用文件内容替换该语句。

需要强调的一点是:#include 是将已存在文件的内容嵌入到当前文件中。

另外关于#include 的路径也有点要说明:include 支持相对路径,格式如trackant(蚁迹寻踪)所写:.代表当前目录,…代表上层目录。

特别注意:

由于嵌套包含文件的原因一个头文件可能会被多次包含在一个源文件中条件指示符可防止这种头文件的重复处理。例如:

#ifndef BOOKSTORE_H

#define BOOKSTORE_H

#endif

条件指示符#ifndef 检查BOOKSTORE_H 在前面是否已经被定义,这里BOOKSTORE_H 是一个预编译器常量,习惯上预编译器常量往往被写成大写字母,如BOOKSTORE_H 在前面没有被定义则条件指示符的值为真于是从#ifndef 到#endif 之间的所有语句都被包含进来进行处理。相反,如果#ifndef 指示符的值为假则它与#endif 指示符之间的行将被忽略,为了保证头文件只被处理一次,把如下#define 指示符

#define BOOKSTORE_H

放在#ifndef 后面这样在头文件的内容第一次被处理时BOOKSTORE_H 将被定义,从而防止了在程序文本文件中以后#ifndef 指示符的值为真。

只要不存在两个必须包含的头文件要检查一个同名的预处理器常量这样的情形,这个策略就能够很好地运作。#ifdef 指示符常被用来判断一个预处理器常量是否已被定义以便有条件地包含程序代码。

#ifdef 除了用于防止重复包含,还可以用于针对不同环境的条件编译。经常出现的有

#if defined (GCC)   ¦ ¦ defined (SUN_C)

之类的指令,就是针对不同编译器、平台进行选择编译的预处理指令。当编译环境没有定义这个特定的符号的时候,则预处理器会自动忽略这一部分的代码。除了用 #ifdef 判断符号是否定义,还可以判断符号的值。VC 中常见的将 MSC_VER 与特定值比较以判断 VC 的版本的做法就是这个道理。

除了以上提到的一些内容,还有一些相对少见的预处理器指令,如 #pragma 。它们分别提供了一些特殊的优化手段和编译器控制方法,可以显著提高代码质量减轻编码负担,但是很多时候使用这些编译指令可能是不兼容于其他编译环境的,因此在项目中选用非标准预处理指令的时候,应该在可移植性和编码的优势中进行衡量后作决定。

就先到这里,O(∩_∩)O~

我的专栏地址:http://blog.csdn.net/column/details/c-daily-study.html

待续。。。。。

作者:Ela–学海无涯
来源:CSDN
原文:https://blog.csdn.net/xinyuwuxian/article/details/9033279
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/wang2425559/article/details/89514221