假设有一个库/API或一堆代码(由其他人编写)要使用,并且它存储在任意文件夹中(如C:\ randoAPIs\coolStuff\includes)。假设我的main.c位于一个不同的文件夹中,比如c:\ MyCProjects\coolProject,为了使用coolStuff API,我将这个include路径添加到我的IDE中,并添加了“coolStuff.h”;它工作得很好。
问题是:
假设“coolStuff.h”本身包含一些其他头文件,比如#include“boringStuff.h”;编译器在哪里查找boringStuff.h?在我的主文件夹里吗?或者在coolStuff的includes文件夹里?包含路径中的任何/所有文件夹?或者这是一个编译器特有的问题,我应该去看看文档

最佳答案

它完全由实现定义。C11 6.10.2p3
3表格的预处理指令

# include "q-char-sequence" new-line

使该指令替换为由"分隔符之间的指定序列标识的源文件的全部内容。以实现定义的方式搜索命名的源文件。如果不支持此搜索,或者如果搜索失败,则重新处理指令,如同读取
# include <h-char-sequence> new-line

与原始指令中包含的相同序列(包括>个字符,如果有的话)。
注意,不需要支持#include "coolStuff.h"。此外,#include "coolStuff.h"甚至可以映射到类似于#include <COOLSTUF.H>的内容。C11 6.10.2p5
5该实现应提供由一个或多个非数字或数字(6.4.2.1)后跟句点(.)和单个非数字组成的序列的唯一映射。第一个字符不能是数字。该实现可以忽略字母大小写的区别,并将映射限制在句点之前的8个有效字符。

07-24 09:46
查看更多