#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" 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章