#include "MyClass.h" 和 #include ".\myclass.h" 有啥区别

Posted

技术标签:

【中文标题】#include "MyClass.h" 和 #include ".\\myclass.h" 有啥区别【英文标题】:What is the difference between #include "MyClass.h" and #include ".\myclass.h"#include "MyClass.h" 和 #include ".\myclass.h" 有什么区别 【发布时间】:2017-08-17 00:16:58 【问题描述】:

我正在使用 VS2010 进行开发,并希望将代码添加到已经存在的项目中。 顺便说一下,这是一个 Win32/MFC。

我不禁注意到,在 MyClass 类(在本例中 MyClass 是 CDialog 类的扩展)中,cpp 文件的顶部包含以下内容:

#include "MyClass.h"
#include ".\myclass.h"

我注意到输入的第二个包含没有大写,但我不太明白为什么?

【问题讨论】:

Windows 文件名不区分大小写。 “MyClass.h”和“myclass.h”的名字是一样的。 【参考方案1】:

"MyClass.h" 将在项目设置中定义的 INCLUDE_DIR 路径上进行搜索。

./myclass.h”将在与当前文件相同的目录中搜索。

Windows 文件名不区分大小写,因此如果您的工作目录位于包含路径中,则这些行指向同一个文件。

这种冗余可能是 VS 确保文件至少包含一次的一种方式...

编辑:感谢 Arne Vogel,我很累,写了一些虚假的东西。 您的编译器只会在文件名类似于 #include <file.h> 的情况下查找您的头文件 但我猜想冗余是要兼容所有文件系统。

【讨论】:

糟糕!你是完全正确的,我很累......对不起,我编辑了我的帖子。谢谢! 我的意思是文档中提到的“.\something.h”和“something.h”之间没有区别。引号和尖括号之间只有区别。详细信息由实现定义,甚至取决于您建议的操作系统。 说实话,原始代码似乎更可能是随机不一致或一厢情愿的结果,而不是任何更合乎逻辑的原因。 :o)【参考方案2】:

.\ 表示查看当前目录。我猜在那个标头中包含保护,这不会是一个问题。

【讨论】:

【参考方案3】:

#include "MyClass.h" 来自环境路径,而#include ".\myclass.h" 来自当前路径。

大多数时候,“MyClass.h”在你项目下的 inc 目录中,而你的 MyClass.cpp 在其他路径中。

【讨论】:

以上是关于#include "MyClass.h" 和 #include ".\myclass.h" 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 没有匹配函数调用‘QVariant::QVariant(MyClass&)’

如何避免包含类实现文件?

访问父类的成员“非静态数据成员的使用无效”C++

使用使析构函数私有[重复]

Qt:将C ++类暴露给QML时出错

预处理器宏扩展为另一个预处理器指令