c incldue 文件包含
引言
前段时间看lua的时候,书中提到标准C是没有定义查找路径的,回想起来C的书籍中确实没有过多实没有提及文件包含的问题。在看linux网络编程的时候一些文件包含格式,以前也见过但是不理解为什么这么写,自己也没深入关注过这方面的问题。在配置eclipse,sublime,vs的文件包含、库文件、动态链接库相关的配置的时候,感觉配置参数和这些文件包含他们之间有那么一些隐隐约约的联系,感觉配置的这些参数,就是编译器,链接器相关命令行参数
,也确实是如此。
如何包含文件的问题其实是一个文件查找的问题。例如php中对文件包含的规则就比较简单require
或者include
后面加上文件路径,但是C语言中在自己的印象中一直好像没有相关的说法,于是翻了一下C程序语言设计这本书,呵呵。。果然是阳春白雪。。就那么一点点。。。不留心可能就忽略了,在工程之中却又是一个非常重要的问题。比如可以利用文件把一个大的工程分开,有利于模块化
开发设计。
随即查阅了一些资料做个简单的小结。
查找路径
按照程序的时段可以划分为三个
- 编译时的查找
- 链接时的查找
- 运行时查找
编译时的查找
include 文件包含格式:
- 尖括号
<>
引起来 - 用引号
""
引起来
引号引起来的首先在文件当前位置查找。如果查找不到,则和尖括号引起来的查找规则一样,规则和具体的实现有关。
gcc查找规则
可以使用 -v
参数查看到gcc查找的路径。
1 |
|
<>
查找规则
- 先搜索
-I
选项后的路径(-I
选项指定的位置),然后是标准的系统头文件路径
。 - 查找通过环境变量添加的路径
- 在头文件中含有路径名。例如:
#include <sys/time.h>
,会在搜索的系统目录
的sys
目录下寻找time.h
文件。 - 头文件中不支持通配符,如
*
链接时的查找
在命令行下可以使用 -L
-l
添加查找路径,也可以使用环境变量添加。含义分别表示 -
-L
查找的文件夹 - -l
静态库文件
运行时查找
查找动态链接库。比如在Windows上运行某个程序的时候,弹出提示说缺少dll的情况,就是因为没有在指定的位置找到对应的DLL。一般把对应的DLL放在程序运行的位置,或者放在系统
C:\Windows\System32
问题就解决了。
部分环境变量的含义
环境变量 | 含义 |
---|---|
C_INCLUDE_PAT | c 查找头文件的路径 |
CPATH | |
CPLUS_INCLUDE_PAT | C++ 查找头文件的路径 |
DEPENDENCIES_OUTPUT | |
OBJC_INCLUDE_PATH | |
SUNPRO_DEPENDENCIES | |
LD_LIBRARY_PATH | 查找动态链接库的路径 |
LIBRARY_PATH | 查找静态库的路径 |
- 详见 http://blog.chinaunix.net/uid-22145625-id-1789493.html
参考
c incldue 文件包含
http://blog.soul11201.com/2015/10/13/c-incldue/