====== #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 #endif ... #include includefile 一些非标准的实现对此的行为有很大不同,为了兼容,更好的方法是: #if some_thing==this_thing #include "thisname.h" #else #include #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选项);同时在源代码里只包含文件名,而不包含路径。 {{tag>C语言}}