【发布时间】:2020-08-05 11:16:28
【问题描述】:
当有两个具有相同指定名称的文件时,首选哪个文件:第一个在包含它的文件所在的目录中,第二个在其他地方但它的目录在包含路径中?
例如:(proj_dir 在包含路径中)
.
└── proj_dir
├── a
│ ├── a.c -> #include "b.h"
│ └── b.h
└── b.h
当a 也在包含路径中时有什么变化吗?
【问题讨论】:
-
预处理器搜索
#included 文件的位置由实现定义。通常,#include "b.h"会首先在当前目录中搜索,但标准并不要求这样做。对于大多数编译器,有一些选项(例如包含路径、环境变量)会影响所发生的事情。您需要阅读编译器的文档才能 100% 确定。或者测试它——在"b.h"的两个版本中做一些明显不同的事情(比如每个版本定义一个不同的宏,然后检查a.c。定义了哪个宏)。 -
优先级取决于编译器,因为它是实现定义的。你用的是什么编译器?
标签: c++ c header include include-path