"#include "MyClass.h"和#include ".\myclass.h"有什么区别?"

4

我正在使用VS2010进行开发,并希望在已有项目中添加代码,该项目是Win32/MFC。

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

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

我注意到第二个include没有大写,但是我不太明白为什么?

Windows文件名不区分大小写。名称"MyClass.h"和"myclass.h"是相同的。 - Thomas Matthews
3个回答

1
"MyClass.h"将在INCLUDE_DIR路径中搜索,该路径在您的项目设置中定义。
"./myclass.h"将在当前文件所在目录中搜索。
Windows文件名不区分大小写,因此如果您的工作目录在包含路径中,则这些行指向同一文件。
这种冗余可能是VS确保文件至少被包含一次的一种方式...
编辑:感谢Arne Vogel,我很累,写了错误的东西。 如果文件名为#include <file.h>,则编译器将仅查找头文件。 但我想冗余是为了符合所有文件系统的要求。"

糟糕!你说得对,我很累了……抱歉,我修改了我的帖子。谢谢! - Caesar
我的意思是文档中提到的".\something.h"和"something.h"之间没有区别。唯一的区别在于引号和尖括号。具体细节是实现定义的,甚至取决于操作系统,正如你所建议的那样。 - Arne Vogel
1
说实话,原始代码似乎更像是随意不一致或一厢情愿的结果,而不是任何更合乎逻辑的原因。:o) - Arne Vogel

0

.\ 表示查找当前目录。我猜测在该头文件中使用了 include guards,所以这不会是一个问题。


0

#include "MyClass.h" 是从环境路径中获取,而#include ".\myclass.h" 是从当前路径获取。

大多数情况下,“MyClass.h”在项目的inc目录中,但是你的MyClass.cpp在其他路径中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接