2010-07-21 107 views

回答

2

對於「加載符號列表」,符號是在編程語言的語法的定義的元素。局部變量名稱是一個符號。類類型標識符是一個符號。 PDB文件包含符號信息,因此調試器可以知道事情的存在以及原始源代碼中的名稱。

對於#if,「符號」表示預處理器(C++)或條件定義(C#)符號。 C#沒有預處理器階段,所以這些術語可能會有點混亂。 #define WIN32你測試一個符號是否使用#如果定義:#if WIN32 < ...>#endif

預處理符號是無類型的,一般不與相交類型和

你語言中使用#define定義條件符號標識符實際上是程序代碼的一部分。預處理器位於源代碼的「上方」。預編譯符號不存在於編譯後的輸出中,並且在運行時不佔用任何內存空間。從邏輯上講,編譯器從不會看到預處理器的語法 - 在文本到達編譯器之前將其刪除。

+1

'PDF文件包含符號信息...「我想你的意思是'PDB文件...' – 2010-07-22 01:01:28

+0

Doh!很好的接收。固定。謝謝。 – dthorpe 2010-07-22 16:49:27

6

「符號」在計算機科學中是一個相當廣泛的(和超負荷/模糊的)術語。維基百科上有一篇文章:Identifier/Symbol/Token

但是,在你的情況,你正在尋找預處理器(預編譯器)指令,這些指令會影響編譯的結果。

#if的情況下,「符號」只是一個變量;一個這樣的「符號」是DEBUG其可用於這樣的:

#if DEBUG 

如果代碼被下調試模式編譯「調試」符號將評估爲true - 因此在這些情況下#if塊中的代碼將被髮送給編譯器。

您也可以使用#define創建一個符號,並且(或多或少)將其值設置爲true。因此,未定義的符號評估爲false,而定義的符號評估爲true

+0

我想你的意思是_DEBUG,如果你使用MSVS的默認值。 – Hitobat 2010-07-21 20:42:23

+0

可能取決於C++ vs C# – STW 2010-07-21 20:42:50

+1

至少在C++中,'#define X'後跟'#if X'會導致語法錯誤,因爲'X'被擴展爲沒有標記。需要'#ifdef X'或'#if defined X'來測試符號是否被定義。要直接使用'#if'指令來測試它,它必須擴展到其他一些令牌,例如'1'。 – 2010-07-21 21:34:32

0

您也可以添加自己的符號以用於代碼或移除內置符號。如果您使用Visual Studio,請在您的項目的「屬性」下執行此操作,然後在「構建」 如果您不使用Visual Studio,我會懷疑在編譯程序時將這些符號添加到命令行中。

/尤