编译windows版本的一厢情愿

compile time windows version wishful thinking

本文关键字:一厢情愿 版本 windows 编译      更新时间:2023-10-16

为了准确地展示我想要的东西,基本上我已经从这里获得了代码,并将其转化为一厢情愿的想法,如下所示:

int wmain( int argc, PCWSTR argv[] )
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
if constexpr (IsWindowsXPOrGreater())
{
printf("XPOrGreatern");
}
else if constexpr (IsWindowsXPSP1OrGreater())
{
printf("XPSP1OrGreatern");
}
else if constexpr (IsWindowsXPSP2OrGreater())
{
printf("XPSP2OrGreatern");
}
else if constexpr (IsWindowsXPSP3OrGreater())
{
printf("XPSP3OrGreatern");
}
else if constexpr (IsWindowsVistaOrGreater())
{
printf("VistaOrGreatern");
}
else if constexpr (IsWindowsVistaSP1OrGreater())
{
printf("VistaSP1OrGreatern");
}
else if constexpr (IsWindowsVistaSP2OrGreater())
{
printf("VistaSP2OrGreatern");
}
else if constexpr (IsWindows7OrGreater())
{
printf("Windows7OrGreatern");
}
else if constexpr (IsWindows7SP1OrGreater())
{
printf("Windows7SP1OrGreatern");
}
else if constexpr (IsWindows8OrGreater())
{
printf("Windows8OrGreatern");
}
else if constexpr (IsWindows8Point1OrGreater())
{
printf("Windows8Point1OrGreatern");
}
else if constexpr (IsWindows10OrGreater())
{
printf("Windows10OrGreatern");
}
else if constexpr (IsWindowsServer())
{
printf("Servern");
}
else
{
printf("Clientn");
}
}

目的显然是要有标准的C++代码,使用带有windows版本编译时检测的constexpr-if。这一切都在VersionHelpers.h中,但它不是编译时的C++17。

VersionHelpers.h中的函数不会返回constexpr值。问题是,是否有人做过这样的事?还是用不同的实现方式来实现相同?

这根本不可能。

尽管库/OS版本有时会对部署施加实际限制,但编译器通常针对体系结构,而不是操作系统

如果你在计算机A上构建代码,编译器如何知道计算机B的操作系统,编译后的程序将在哪里运行?。

所以这就是其中没有一个是constexpr的原因之一。

以下是对更多运行时途径的探索。