#include简介
在C语言中#include是preprocessor的一条指令,用于告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。
#include “xxx.h” 和 #include
指定插入头文件有两种方式:
#include
#include "filename"
如果需要包含标准库头文件,如一些数学函数的原型等等,应该使用。如果需要包含自己程序所开发的源文件,应该使用
""
。
这两种形式的#include指令的行为是预处理器指定的,都是用来复制其他文件中的内容。二者的区别在于搜索header文件的路径不同,按照指定路径顺序搜索。
使用#include“xxx.h”时,搜索路径包含了#include文件的路径是在标准include路径中(关于这几个路径的搜索就不多说了),所以使用
的效率更高。
在 #include 命令中使用宏
#include 命令也是可以使用宏的,例如
#ifdef _DEBUG_
#define MY_HEADER "blinky.h"
#else
#define MY_HEADER "blinkyQP.h"
#endif
#include MY_HEADER
这样在我们调试的时候可以根据_DEBUG_
是否定义来确定包含哪些头文件,当然你都包含也可以,但是会有重复包含的问题,后面会说到。
嵌套的 #include 命令
通过#include命令插入的源文件本身也可以包含另一个 #include 命令,预处理器最多允许15层的嵌套包含,但这种现象会发生相同的一个文件被多次包含的情况,例如
//blinky.h
#include
...
如果blinky.c文件如下所示,就会直接与间接的两次包含stdio.h。
//blinky.c
#include
#include "blinky.h"
...
那么如何避免多次包含呢,我们可以采用常用的条件式编译的命令,例如
#ifndef BLINKY_H_
#define BLINKY_H_
/* ...实际的头文件blinky.h的内容写在这里... */
#endif /* BLINKY_H_ */
在创建一个头文件时,可以用#define指令为它定义一个唯一的标识符BLINKY_H_。通过#ifndef指令检查这个标识符BLINKY_H_是否已被定义,如果已被定义,则说明该头文件已经被包含了,就不要再次包含该头文件;反之,则定义这个标识符名称,以避免以后再次包含该头文件。
打印文本内容比较长
#include
int main(void)
{
printf
#include"tech.txt"//tech.txt的内容为("ID:TechDreamer");
return 0;
}
//输出ID:TechDreamer
在预编译的时候,将#include文件的内容嵌入到当前所在位置,当文本内容比较长,直接复制在源代码里面会显得代码冗余不美观,可以使用这种方法,等价于
#include
int main(void)
{
printf("ID:TechDreamer");
return 0;
}
不能把#include 指令放置在extern “C” { … }里面
这里可以参考为什么不能把#include 指令放置在 extern “C” { … } 里面?
C语言中#include只能包含.h文件吗?
C语言中#include可以include .c
这样使用吗?是不是没见过,其实这样是可以的。
从语法角度讲,include的意思就是从当前位置包含另外一个文件,从这点讲,include .c文件是可行的,c编译器完全能够正常处理。
那怎么样包含.c文件呢?因为本文主要是讲#include的用法有哪些,这个就暂时不说啦,感兴趣的可以去了解一下。
但是为什么不常见include .c文件?我们需要了解.c与.h文件功能的区别。一般来说.h文件提供接口,.c文件提供具体的实现,不一定要一一对应。如果一个.c文作包含其他模块对应的.h文件,而这个.c文件可能有一些结构,变量等与包含其他模块的实现(.c文件)重复了,会导致出错,所以一般不会使用,毕竟我们不写奇葩的代码。
提问
-
#Include 搜索的路径有哪些? -
extern “C”有什么作用呢? -
include .c文件可以自己写一个例子吗?
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !