我已经查阅了来自stackoverflow的问题如何正确使用include指令和C++ #include语义,它们都没有涉及到这个问题,当我输入标题时,SO建议的其他问题也没有解决此问题...
写下以下代码有哪些好处(如果有):
#include "../include/someheader.h"
#include "../otherdir/another.h"
与仅使用普通文件名相比:#include "someheader.h"
#include "another.h"
或者使用相对路径名称而不是带有 '..
' 的路径:
#include "include/someheader.h"
#include "otherdir/another.h"
我看到的问题有:
- 你不能移动一个头文件而不用担心包含它的哪些源文件会受到影响。
- 你可能会在依赖关系和错误报告中得到非常长的头文件路径。今天我就遇到了一个例子,其中包括了“
../dir1/include/../../include/../dir2/../include/header.h
”。
我唯一能看到的好处是,虽然你不需要移动文件,但你可能可以不总是使用'-I
'指令来查找头文件,但失去灵活性以及在子目录中编译的复杂性等似乎超过了好处。
那么,我是不是忽视了一些好处?
谢谢大家的意见。我认为共识是我没有忽视使用 ".." 符号的任何主要好处。一般来说,我喜欢“somewhere/header.h”的符号;我在新项目中使用它。我正在处理的这个项目远非新项目。其中一个问题是有各种各样的头文件集,通常带有前缀,例如rspqr.h
、rsabc.h
、rsdef.h
、rsxyz.h
。所有这些都与rsmp
目录中的代码相关,但有些头文件在rsmp
中,而其他头文件则在中央包含目录中,该目录没有像rsmp
这样的子目录。(对于代码的各个其他区域也是如此;有多个位置的头文件,由其他的代码随机需要。)移动所有内容是一个主要问题,因为多年来代码已变得如此复杂。而且makefile在提供-I
选项方面并不一致。总之,这是一个长达数十年的不那么良性的忽视的悲伤故事。修复它所有的问题而不破坏任何东西将是一项漫长而乏味的工作。