C/C++编译器头文件包含顺序与相对路径技术问询
C/C++头文件包含路径冲突测试与问题解答
测试文件夹结构
MainFolder main.cpp LibraryFile.h Files LibraryFile.h Library1Name MainHeader.h LibraryFile.h Files LibraryFile.h Library2Name MainHeader.h LibraryFile.h Files LibraryFile.h
测试场景
仅将MainFolder(根目录)加入包含路径,在main.cpp中编写:
#include "Library1Name/MainHeader.h"
Library1Name和Library2Name下的MainHeader.h均包含:
#include "LibraryFile.h" #include "Files/LibraryFile.h"
此处刻意让根目录、Library1、Library2的文件结构与文件名完全一致,产生潜在冲突:编译器会选择Library1内的文件,还是根目录下的文件?
问题1:这种情况下的头文件包含顺序是否有明确规定?
在测试环境中,编译器选择了Library1内的文件,未出现冲突。但假设存在冲突时,在包含路径中添加./会有什么效果?例如在Library1的MainHeader.h中改为:
#include "./LibraryFile.h" #include "./Files/LibraryFile.h"
此前出现冲突时,添加./解决了问题。我的理论是:./始终指向编写该语句的文件(即头文件)所在目录,而非被包含的.cpp文件所在目录,因此编译器不会选择根目录下的文件。
问题2:./是否始终具备上述特性?
此外,若将MainFolder/Library2Name加入包含路径会引入新冲突,而添加./能否消除所有冲突?我的理论正确程度如何?
注:本文仅聚焦
#include "",暂不考虑#include <>
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

