computer:c:tips:file_inclusion
#include文件包含(File inclusion)
标准C支持三种形式的#include指令:
- #include <...>
- #include "..."
- #inlcude preprocessor-tokens
<>和""之间的内容通常是一个依赖于实现的文件名,文件名中可以有三元组(trigraph)和续行符。
使用<>还是""依赖于具体实现对文件存放位置的定义。通常<>表示文件存放于实现的一些标准位置,而""表示在查找标准位置之前,先在一些本地位置查找,如当前目录。
第三种形式的preprocessor-tokens执行正常的宏扩展,扩展后的结果必须符合前两种形式。
例如:
#if some_thing==this_thing #define includefile "thisname.h" #else #define includefile <thisname.h> #endif ... #include includefile
一些非标准的实现对此的行为有很大不同,为了兼容,更好的方法是:
#if some_thing==this_thing #include "thisname.h" #else #include <thisname.h> #endif
include的文件里面还可以包含#include指令,能嵌套的最大层数依赖于实现,标准C要求至少能嵌套8层(C99提高到15层)。
嵌套存在一个路径问题。如/near/first.c中有:
#include "/far/second.h"
而/far/second.h包含:
#include "third.h"
这里的third.h应该在/near目录还是/far目录?不同实现可能有不同的答案。
一个通常的做法是由程序员指定若干头文件搜索路径(如cc的-Idir选项);同时在源代码里只包含文件名,而不包含路径。
computer/c/tips/file_inclusion.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1