Visual Studio C/C++ 项目中的默认的 Release 和 Debug 版本预处理宏可以包括一些通用的宏定义,其中一些可能取决于项目的设置和目标平台,除此之外还可以根据需要创建自定义版本:

WIN32
:这是 Windows 平台的标准宏,指示代码正在 Windows 操作系统上编译。如果没有定义 WIN32
宏,你的代码中的条件编译指令(例如 #ifdef WIN32
或 #ifndef WIN32
)将不会按预期工作。但实际支持跨平台编译的 C++ 程序大多数时候用的都是 _Win32 这个宏,如以下代码所示:
#ifdef _WIN32
std::invoke(func, lockedCallback, args...);
#else
std::__invoke(func, lockedCallback, args...);
#endif
这两个宏的作用相似,但通常情况下,_WIN32
更为常见,因为它是 Microsoft 编译器和许多 Windows 相关的头文件中使用的约定。_WIN32
宏通常是由编译器预定义的,特别是在 Windows 环境中。编译器会在编译 Windows 应用程序时自动为你定义这个宏。这意味着你无需手动定义 _WIN32
,它会根据你选择的目标平台自动出现。
通常,当你使用 Microsoft Visual C++ 编译器(如 Visual Studio)来构建 Windows 应用程序时,_WIN32
宏将自动定义,因为这个编译器主要用于 Windows 平台的开发。_WIN32
宏主要用于区分 Windows 和非 Windows 平台的代码。在 Windows 上编译的 x64 应用程序仍然可以使用 _WIN32
宏来区分 Windows 平台和其他平台。所以可能是先入为主的历史