代码之家  ›  专栏  ›  技术社区  ›  GurdeepS

关于预处理器指令的问题

c#
  •  0
  • GurdeepS  · 技术社区  · 14 年前

    如果我使用proprocessor指令定义操作系统将运行的代码,如下所示:

         #if winXP // Compiling for Windows XP
        platformName = "Microsoft Windows XP";
        #elif win2000 // Compiling for Windows 2000
        platformName = "Microsoft Windows 2000";
        #elif win7 // Compiling for Windows 7
        platformName = "Microsoft Windows 7";
        #else // Unknown platform specified
        platformName = "Unknown";
    

    系统如何识别正在使用的操作系统?

    谢谢

    4 回复  |  直到 14 年前
        1
  •  1
  •   Skizz    14 年前

    “#if”和“#elif”(else if)不是编译器看到的,而是预处理器看到的,编译器只看到这四行中的一行。被编译的一个由不存在、一个或多个以下项决定:

    #define winXP
    #define win2000
    #define win7
    

    或者,在编译器命令行中指定“/D”。您可以定义多个,只编译if/elif序列中的第一个匹配项。

    为什么要这样做?

    好吧,Win32 API经过多年的发展,新版本的API具有早期版本所没有的特性。另外,一些API函数的行为也因操作系统版本的不同而略有不同。

        2
  •  0
  •   Sir Graystar    14 年前

    它不仅会比较给定的版本名(winXP、win7等)所隐含的版本号,还会与当前系统的版本号进行比较吗?

        3
  •  0
  •   Matt Enright    14 年前

    或者显式地在源文件中,通过 #define winXP /p:DefineConstants=WinXP #if DEBUG 顺便说一下,通过在设置 DEBUG 不变。

    如果您想知道如何在运行时确定操作系统,请看 System.Environment.OSVersion 以及 System.PlatformID 枚举。

        4
  •  0
  •   Soe Moe    14 年前

    如果我需要检测操作系统版本,我会使用 Environment.OSVersion . 虽然是运行时检查,但我更喜欢使用ty.NET框架提供的抽象。