2010-06-07 53 views
0

如果我使用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"; 

系統如何拿起正在使用的操作系統?

這是從書的Visual C#2010食譜,其中創作者說,platformName變量(聲明ommitted),港島線等於上述OS的例子。

感謝

回答

1

的「#如果」和「#ELIF的(否則-IF)不是由編譯器,但預處理器看到,只有那些四種情況之一‘platformName =’行是由編譯器看到。編譯的結果由以下一項或多項決定:

#define winXP 
#define win2000 
#define win7 

或者通過在編譯器命令行中指定「/ D」來決定。您可以定義多個,僅在if/elif的序列中的第一場比賽將被編譯。

爲什麼這樣做?

好了,在Win32 API已經經過多年的發展和API的新版本具有的功能,早期版本沒有。此外,根據操作系統版本,某些API函數的行爲會稍有不同。

0

將它不僅僅是比較給出(操作系統,WIN7等)的版本名稱所暗示的版本號和當前系統的版本號比較?

0

您在預處理器(win7,winXP,win2000等)中檢查的值也必須由預處理器定義。

明確地在源文件中,通過#define winXP(這可能不會幫你在這裏),或者通過你的構建系統(例如在MSBuild中,嘗試/p:DefineConstants=WinXP)。請注意,在這種情況下,您必須重新編譯以啓用/禁用這些值。這是語句如#if DEBUG製成有用,順便說一下,通過在設置DEBUG恆定的結構進行編譯。

如果您想知道如何在運行時確定操作系統,請查看System.Environment.OSVersionSystem.PlatformID枚舉。

0

如果我需要檢測操作系統的版本,我會用Environment.OSVersion。雖然它是運行時檢查,但我更喜歡使用基於.NET框架的抽象。