C++编译时间宏来检测windows os

Raj*_*jiv 5 c++ windows header windows-7 preprocessor-directive

是否存在任何C++编译时宏来检测正在编译代码的Windows操作系统.我基本上只想在Win7上支持某些功能.所以我有兴趣做这样的事情

#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 
Run Code Online (Sandbox Code Playgroud)

还有其他更好的方法吗?

Ada*_*eld 11

它正在编译的操作系统并不是那么重要; 更重要的是代码运行的操作系统,在编译时显然无法检测到.但是,如果您希望您的代码在旧版本的Windows上运行,您可以设置WINVER_WIN32_WINNT某些值,这将导致更新的功能无法使用等.(只需在Windows头文件中搜索这些宏进行测试的地方以获得一个想法).

要在运行时测试功能,请使用GetProcAddress(也可能LoadLibrary,如果它在较新的DLL中)来测试该功能是否可用.如果是,请拨打电话,如果没有,请不要.

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

  • 为什么要单独构建?为什么一个构建的行为不同,具体取决于它运行的操作系统? (3认同)