【问题标题】: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”的名字是一样的。

标签: c++ visual-c++ mfc


【解决方案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 在其他路径中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多