2014-04-02 52 views
1

它們必須放在.cs文件的頂部。你不能在運行時動態地創建這些人,你不能給他們一個價值或改變他們的價值,因爲根本沒有價值,所以#define關鍵字是什麼意思?#define的要點是什麼?

下面是一個例子:

#define DEBUG 
#define MYTEST 
using System; 
public class MyClass 
{ 
    static void Main() 
    { 
#if (DEBUG && !MYTEST) 
     Console.WriteLine("DEBUG is defined"); 
#elif (!DEBUG && MYTEST) 
     Console.WriteLine("MYTEST is defined"); 
#elif (DEBUG && MYTEST) 
     Console.WriteLine("DEBUG and MYTEST are defined"); 
#else 
     Console.WriteLine("DEBUG and MYTEST are not defined"); 
#endif 
    } 
} 

所以爲什麼有反正所有的IFS兩者都在上面定義的?

有人可以告訴我情況哪裏定義是有用的?

對不起,如果這是一個重複只是讓我知道如果是這樣的意見,我會刪除這個問題。

回答

6

關鍵是條件compialtion

像:

#ifdef x64  
.... 
#else 
.... 
#endif 


#ifdef KIOSK 
    fullScreen =true; 
#else 
    fullScreen =false; 
#endif 

您創建編譯時狀態,這樣你的二進制文件不會在運行時改變,但 會適合你正在編譯for.It可能是您的目標環境的具體要求什麼你想,這取決於你的名字和語義#define

編輯

示例:您有一個訪問低級別Windows API的程序,並且您必須支持 x86和x64版本。在這種情況下,您可能希望在32位的程序中使用二進制文件(編譯後),因此沒有任何64位函數的證據。所以,你可以寫

#ifdef x64 //conditional compilation symbol defined by YOU 
    DriverInfo GetDriverInfo64(..) {...} //64bit 
#else 
    DriverInfo GetDriverInfo(..) {...} //32bit 
#endif 
+0

如果非要定義它們之上則每個編譯他們會在那裏。它們是硬編碼的。那麼你在那裏有條件是什麼意思? –

+0

這是如何回答這個問題的?當然,你會展示預處理器使用的例子......但這不是問題**。我真的很困惑,它在這麼短的時間內得到了很多讚揚。 –

+0

你沒有。您也可以在項目屬性中定義它們,具體取決於您是否擁有編譯版本或發行版本。 – TomTom

0

你並不需要與#define定義這些符號,你可以在項目設置或每編譯器參數設置全局它們。但有時候,當您可以爲單個文件更改符號的值(設置/取消設置)時進行測試或調試。然後#define將成爲你的朋友:)

+0

Ahhh好吧我以前不知道這個。這是有道理的。 :) –

0

你應該刪除頂部的兩個#define語句。如果您使用Visual Studio進行編譯,則可以選擇是否打開調試。如果你打開調試,編譯器會知道你的代碼有哪些部分,哪些部分沒有。

假設你有DEBUG打開,您的代碼如下:

using System; 
public class MyClass 
{ 
    static void Main() 
    { 
     Console.WriteLine("DEBUG is defined"); 
    } 
}