C ++编译时间macros来检测Windows操作系统

是否有任何C ++编译时macros,它们用于检测正在编译哪个Windows操作系统的代码。 我基本上只想在Win7上支持某些function。 所以我有兴趣做这样的事情

#if <os_macro> = WIN7 // This function would do something valid only on Win7 builds. bool myfunction { // do something here } #else // This function would typically return false, since its not supported on OS below win7 bool myfunction { return false; } #endif 

有没有其他更好的方法来做到这一点?

Solutions Collecting From Web of "C ++编译时间macros来检测Windows操作系统"

它正在编译的操作系统并不是那么重要, 更重要的是代码运行的操作系统,在编译时显然无法检测到。 但是如果你想让你的代码在老版本的Windows上运行,你可以将WINVER_WIN32_WINNT设置为某些值,这会导致更新的函数不可用等等(只要搜索Windows头文件,一个主意)。

要在运行时测试功能,可以使用GetProcAddress (也可能是LoadLibrary ,如果它位于较新的DLL中)来测试函数是否可用。 如果是,请打电话,否则不要。

如果要检测编译器版本等,请参阅由Visual Studio编译器使用的预定义的宏

有一组标准的Windows头宏来告诉你操作系统的确切版本

至少在MS VC ++,WIN32,_WIN32和_WIN32_WINNT,对于初学者。 除非你需要在编译时控制它,否则你可能会考虑使用类似于GetVersionEx的东西在运行时检测,所以同样的版本在旧版本上运行,但是当它们可用时利用新的特性。

对于那些想在Visual Studio(2017)下的CONSOLE和WIN32 App之间进行编译/包含的人来说,我的两分钱就是我的情况。

您使用向导创建控制台应用程序,您将拥有:

WIN32; _DEBUG; _CONSOLE;%(PreprocessorDefinitions)

下: 在这里输入图像说明

如果您使用向导为win32 GUI A pp:

WIN32; _DEBUG; _WINDOWS;%(PreprocessorDefinitions)所以没有_CONSOLE。

在这里输入图像说明

所以你可以写:

 #ifdef _CONSOLE // for Console #else // for GUI #endif // _CONSOLE int main() { #ifdef _CONSOLE // for Console #else // for GUI #endif // _CONSOLE return 0; }