Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否需要包括;Windows.h";是否隐式使用/与WindowsAPI通信?_C++_C_Windows_Winapi_Header - Fatal编程技术网

C++ 我是否需要包括;Windows.h";是否隐式使用/与WindowsAPI通信?

C++ 我是否需要包括;Windows.h";是否隐式使用/与WindowsAPI通信?,c++,c,windows,winapi,header,C++,C,Windows,Winapi,Header,引用“Windows.h”(强调我的): “Windows .h是C和C++编程语言的Windows特定的头文件,它包含Windows API中所有函数的声明、Windows程序员使用的所有通用宏以及各种函数和子系统使用的所有数据类型。它定义了大量可在C中使用的特定于Windows的函数**。通过包含头文件并链接到适当的库,可以将Win32 API添加到C编程项目中。要使用xxxx.dll中的函数,程序必须链接到xxxx.lib(或MinGW中的libxxxx.dll.a)。某些标头与.dll不

引用“Windows.h”(强调我的):

“Windows .h是C和C++编程语言的Windows特定的头文件,它包含Windows API中所有函数的声明、Windows程序员使用的所有通用宏以及各种函数和子系统使用的所有数据类型。它定义了大量可在C中使用的特定于Windows的函数**。通过包含头文件并链接到适当的库,可以将Win32 API添加到C编程项目中。要使用xxxx.dll中的函数,程序必须链接到xxxx.lib(或MinGW中的libxxxx.dll.a)。某些标头与.dll不关联,但与静态库关联(例如,scrnsave.h需要scrnsave.lib)。"


我的问题:

如果我希望我的可执行文件(创建为仅在windows上运行)隐式地与WindowsAPI通信/使用WindowsAPI,我是否需要将
windows.h
的头文件包含到我的C/C++项目中

或者,如果我没有另外指定它,并且希望隐式访问WindowsAPI,编译器是否会自动执行此操作


我的意思是不要显式地使用
windows.h
中定义的函数、宏或数据类型。相反,如果我想通过shell隐式地访问WindowsAPI的组件,例如使用cmd.exe或PowerShell。

windows.h
是一个“超级头”“包括几乎所有可以想象的东西。WinAPI的特定部分也有自己的标题,因此您也可以只包含您感兴趣的部分

在MSDN上查找特定的API函数。如果它指定函数驻留在一个特定的头中,那么可能只包含该头。如果它编译和链接良好,那么您就不需要windows.h.

这不仅适用于使用Win32 API的“windows.h”,而且(几乎)适用于与特定API相关的任何头文件。作为一般规则,我想说的是,在实际需要标题之前,不需要包含标题。在大多数情况下,您是否需要它在API文档中有说明

例如,告诉您需要
包括Windows.h


因此,在您实际使用此函数或其他函数(宏、类、定义等)之前,您不需要包含相应的头。

当您尝试不这样做时发生了什么?@user253751我创建的可执行文件在没有它的情况下运行良好。我不知道是否出于任何特定原因需要包含它。您的代码中是否使用Windows API?Windows API中的某些内容需要包含Windows.h,但不是所有内容都需要包含。如果你可以不包含它就离开,那么很棒——它定义了很多垃圾。在C和C++中,符号必须在使用它的地方被声明。头文件是引入库公开的符号的常用方法。如果使用库,则必须使编译器知道这些符号。您可以包含其头文件,也可以自己声明符号。例如,如果您使用C++线程支持库,则<<代码>包含< <代码>。该实现将使用Windows API,但您无需解析库的依赖项。即,如果您使用的是
,则无需
#包括