【问题标题】:Case Sensitivity in C++ Header FilesC++ 头文件中的大小写敏感性
【发布时间】:2012-02-26 02:44:07
【问题描述】:

在 C++ 方面我完全是个菜鸟,我一直在尝试通过 XInput 增加对 Xbox 360 游戏手柄的支持 Moai。当我包含 XInput 的标头时,有两个选项:

  1. X输入

  1. X输入

此外,为了使用 XInput,我需要包含 windows.h。我见过的所有示例都使用以下语法:

#include <windows.h>

但 Visual C++ Express 2010 中的自动完成插入

#include <Windows.h>

在 XInput/Xinput 的情况下,区分大小写似乎很重要,但在 Windows.h 上似乎无关紧要。

包含头文件时区分大小写是否重要?这有什么逻辑吗?

XInput 的区别仅仅是因为有一个名为 XInput 的标题和另一个名为 Xinput 的标题吗?

【问题讨论】:

标签: c++ windows header-files case-sensitive xinput


【解决方案1】:

标头名称和包含指令的大小写敏感度由实现定义。通常,它可以确定您正在构建的平台是否区分大小写。

我必须测试以确保,但我怀疑如果您键入任何种类的“xinput.h”,它会找到在标题搜索路径中首先出现的那个,即使稍后出现的文件就大小写而言,在搜索路径中是更好的匹配。从不熟悉这些问题的开发人员的角度来看,这将是非常不直观的,因为这意味着您可以使用其中一个自动完成功能,然后 VS 将包含所选文件 not

VS 也可能比这更聪明,并且会搜索最佳大小写匹配。

【讨论】:

  • 我会赞成这个,因为它是唯一一个声明它是实现定义而不是操作系统定义的。 ISO 声明包含语句中字符串的处理几乎完全取决于实现。通常,这将映射到底层文件系统属性,但不一定如此。事实上,头文件根本不需要在文件系统上:-)
【解决方案2】:

仅当底层文件系统区分大小写时才重要。 Windows 文件系统不区分大小写,但 Linux 等操作系统的文件系统是。尝试使用真实文件的确切名称,以确保您的代码在/当您将其从一个操作系统移植到另一个操作系统时能够正常工作。

【讨论】:

  • 文件系统不是控制搜索区分大小写的东西。它是编译器(参见 16.2.2 [cpp.include]:“如何指定位置或标识的标头是实现定义的。”
【解决方案3】:

在 Windows 上,文件名不区分大小写,这扩展到 #include。任何情况都可以。

在某些平台(例如 Linux)上,文件名区分大小写,因此您需要匹配实际的文件名。

【讨论】:

  • 编译器怎么知道XInputXinput的区别?
  • 这些是类名,而不是文件名。类和其他 C 事物始终区分大小写。
  • @NoobsArePeople2:编译器不知道这些文件之间的区别。编译器得到操作系统给它的文件a。 C++ 源代码区分大小写,与操作系统无关,这包括 class 名称(但不包括它们的文件)。
  • @StilesCrisis 不,它们不是类名。它们是文件名。
  • 你的意思是,为什么自动完成显示两个不同大小写的选项?自动完成功能找到了两个名为 XInput 的文件,每个文件的大小写不同。不要过多地阅读自动完成功能。有时很愚蠢。
【解决方案4】:

Windows 不像其他人所说的那样区分大小写。但这不是你的问题。您的问题在于 Visual Studio 中的包含文件设置。编译器将按照设置的顺序查找标准头文件(使用&lt;&gt; 语法的头文件包含)。启动Tools-&gt;Options,然后查找Projects and Solutions-&gt;VC++ directories 并查看Include Files 的序列。

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2017-02-21
    • 2016-04-14
    • 2010-12-29
    相关资源
    最近更新 更多