当我以下列方式在c程序中包含“windows.h”时
#include "windows.h"
它编译得很好。根据我的知识,如果我们包含带有“”的头文件,编译器将在当前目录中搜索头文件。那么我的程序如何在没有头文件的情况下编译呢?
答案 0 :(得分:4)
引用形式#include
的处理是实现定义的。标准(ISO / IEC 9899:201x,6.10.2.3)说明了我的重点:
表单
的预处理指令# include "q-char-sequence" new-line
导致该指令的全部内容被替换 源文件由“...之间的指定序列标识” 分隔符。在一个中搜索指定的源文件 实施定义的方式。如果不支持此搜索,或者如果 搜索失败,指令被重新处理,就像它读取
一样# include <h-char-sequence> new-line
包含相同的序列(包括&gt;字符,如果有的话) 来自原始指令。
所以要回答这个问题,你需要参考编译器的文档。
为了论证和说明,我们假设您使用MS编译器,因为您没有指定您使用的编译器。对于引用形式的#include
:
预处理器按以下顺序搜索包含文件:
- 与包含#include语句的文件位于同一目录中。
- 在任何先前打开的包含文件的目录中,按照与打开它们相反的顺序。搜索从 最后打开并继续的包含文件的目录 通过首先打开的包含文件的目录。
- 沿着每个/ I编译器选项指定的路径。
- 沿着INCLUDE环境变量指定的路径。
醇>
如果您使用的是其他编译器,则需要参考编译器的文档。