小写的windows.h和大写的Windows.h有什么区别?

26
小写的<windows.h>和大写的<Windows.h>头文件有什么区别?我在阅读一些关于Win32编程的旧教程,它们都使用小写的“w”。代码可以编译,但是VS 2012的自动完成功能只列出<Windows.h>头文件。

它们完全是同一件事。 - Mohammad Dehghan
2
我有点喜欢这个问题,因为通常你不会问这个问题,无论你写 w 还是 W 都可以工作。 - MahanGM
3个回答

25
Windows系统上的文件系统不区分大小写,因此在Windows上编译时任何大小写方式都可以。但是,如果您在Linux上使用MinGW交叉编译器进行编译,大小写就很重要了。
MinGW中的`windows.h`头文件似乎总是小写。
Microsoft工具提供的`Windows.h`文件使用了各种大小写方式。
- 旧的VC++安装(VC++98及更早版本)似乎会安装全部大写的`WINDOWS.H`。 - 较新的VC++安装和Windows SDK似乎使用`Windows.h`。 - 一些移动设备SDK(PocketPC或Windows Mobile)使用全部小写的`windows.h`。
由于`windows.h`在Windows和Linux交叉编译上都能正常工作,因此我会使用`#include <windows.h>`。不过,在回答这个问题之前,我无法回忆起自己是否思考过这个问题。
我不会太担心这个问题。即使全大写的形式出现在Linux MinGW构建中,一个简单(但可能烦人)的解决方法是创建一个`Windows.h`文件,然后将其包含到`windows.h`中。

19

没有区别,因为在Windows(NTFS)上的文件名不区分大小写。


根据NTFS 卷上的文件名区分大小写实际上,NTFS有两种不同的模式,其中一种是区分大小写的:

NTFS支持两种略微不同的操作模式,可以由与NTFS交互的应用程序子系统进行选择。第一种完全区分大小写,并要求应用程序提供的文件名与磁盘上存储的名称匹配(包括大小写),如果要选择磁盘上的文件,则必须相同。第二种操作模式保留大小写但不区分大小写。这意味着即使提供的名称与磁盘上存储的名称大小写不同时,应用程序也可以选择磁盘上的文件。请注意,两种模式都保留用于创建文件的大小写。这里指出的行为差异仅适用于应用程序需要查找现有文件的情况。 POSIX利用完全区分大小写的模式,而MS-DOS、WOW和Win32子系统使用不区分大小写的模式。


是的,现在我记得了,Linux有区分大小写的文件名,而Windows没有。 - balky
是的,但这假设您在Windows文件系统上构建。例如,在交叉编译时,它确实很重要。然后<windows.h>是更好的选择(由@michael-burr解释)。 - m-bitsnbites

5

这些文件与 Windows 文件系统是不区分大小写的相同文件。


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