Windows 7 什么#if预处理器指令来确定操作系统是否为WIN 7 SP1?

Windows 7 什么#if预处理器指令来确定操作系统是否为WIN 7 SP1?,windows-7,c-preprocessor,preprocessor-directive,Windows 7,C Preprocessor,Preprocessor Directive,我希望根据编译机器是否运行Windows7SP1进行条件编译 我们有一个解决方案,但我不想签入代码,除非它由#ifdef(u WIN7)SP1保护,否则其他开发人员将无法在非WIN7-SP1机器上编译它 我用了一点谷歌搜索,但找不到任何有用的东西。你没有。构建机器环境中的东西通常不会像那样污染编译。(想象一下,如果发生这种情况,它会对构建的再现性造成什么影响。) 如果您真的需要,我会让您的构建系统(make、Visual Studio等)执行一个程序,检查当前Windows版本,并在必要时失败(

我希望根据编译机器是否运行Windows7SP1进行条件编译

我们有一个解决方案,但我不想签入代码,除非它由#ifdef(u WIN7)SP1保护,否则其他开发人员将无法在非WIN7-SP1机器上编译它


我用了一点谷歌搜索,但找不到任何有用的东西。

你没有。构建机器环境中的东西通常不会像那样污染编译。(想象一下,如果发生这种情况,它会对构建的再现性造成什么影响。)


如果您真的需要,我会让您的构建系统(make、Visual Studio等)执行一个程序,检查当前Windows版本,并在必要时失败(或者您的构建系统可能已经确定)。基于此,您可以通过编译器的命令行参数有条件地创建自己的
WIN7\u SP1
定义。

因为WIN7上的所有开发人员都应该在WIN7 SP1上,并且您可以从已知的生成机器生成生产生成(对吗?),你不能简单地假设所有的编译机器都需要这个补丁吗?不。不是所有的开发人员都在Win7SP1上。生产构建不是问题——我们有一个构建机器(不是SP1)来解决这些问题。然后我们将开发版本(在SP1上为我们两人构建)放在测试机器上。也许可以修复原因而不是症状?我的意思是应用服务包有多难?还是有理由继续使用Win7 RTM?当我们在客户站点部署开发人员构建时,可能会出现这样的情况—甚至可能没有(可靠的)internet访问,因此无法在家中使用构建机器。许多客户机器仍然是WinXP。但是詹姆斯,我认为你是对的。我必须在构建中为WIN7_SP1创建自己的def(或者永远不要签入2个有问题的头文件,这样我就不会破坏其他开发人员的构建:-)