2014-03-06 52 views
0

我總是想知道c和彙編聲明(以及其他地方)中的下劃線字符的功能。 什麼含義的 '_' 像使用下劃線字符

MSVCRT!_output: 
77c3f0f3 55    push ebp 
77c3f0f4 8bec    mov  ebp,esp 
77c3f0f6 81ec50020000  sub  esp,0x250 
77c3f0fc 33c0    xor  eax,eax 
77c3f0fe 8945d8   mov  [ebp-0x28],eax 
77c3f101 8945f0   mov  [ebp-0x10],eax 
77c3f104 8945ec   mov  [ebp-0x14],eax 
77c3f107 8b450c   mov  eax,[ebp+0xc] 

#ifdef __unix__ /* __unix__ is usually defined by compilers targeting Unix systems */ 
# include <unistd.h> 
#elif defined _WIN32 /* _Win32 is usually defined by compilers targeting 32 or 64 bit Windows systems */ 
# include <windows.h> 
#endif 

#if !(defined __LP64__ || defined __LLP64__) || defined _WIN32 && !defined _WIN64 
    // we are compiling for a 32-bit system 
#else 
    // we are compiling for a 64-bit system 
#endif 
在C預處理

聲明? (這只是我拿起對飛例子=

爲什麼以及何時是使用單或雙下劃線? 非常感謝您的幫助! N.組裝

+0

[爲什麼C編譯器預先強調外部名稱下劃線?](http://stackoverflow.com/questions/2627511/why-do-c-compilers-prepend-underscores-to-external-names) –

+0

是啊,它看起來像,我會檢查出來!感謝您的建議! – Neurophobos

回答

0

下劃線字符沒有什麼特別的含義,它通常被用來替代長描述性標籤中的空格:jumps_here_when_the_things_go_wrong:

無論如何,使用下劃線作爲第一個字符可能只是C編程中的一種習慣。另一種語言,不使用這樣的標籤。

我個人使用的標籤只在庫中以下劃線開頭,僅用於僅供內部使用的全局標籤。

使用下劃線的數量取決於從庫外使用該標籤有多麼不受歡迎 - 一個下劃線意味着「想你做什麼」,三個下劃線意味着「永遠不會使用它」。

+0

夥計們,我發現我在說什麼! (太奇怪了,直到現在我還沒有找到這個頁面,我一直在搜索很長一段時間)。這是關於包括後衛。 謝謝您的關注! – Neurophobos

+0

只是爲了確保......當您找到類似RtlAllocateHeap的代碼(http://msdn.microsoft.com/en-us/library/windows/hardware/ff552108%28v=vs.85%29。 aspx) 這些下劃線沒有任何功能,因爲它們在包含守衛中......它們只是變量名稱的一部分,就像構成它的任何其他字符一樣,對嗎? 再次感謝! – Neurophobos