2009-12-30 46 views
12

當從字面上理解時,它是有道理的,但是它是什麼意思是變量名的重要特徵?(K&R)內部名稱的前31個字符至少有意義?

我用k & R.下面是從書中直接引用的C一開始學習:

「至少有一個內部名稱的前31個字符是顯著對於函數名和外部。變量,數字可能小於31,因爲外部名稱可能被彙編程序和加載程序使用,而語言無法控制,外部名稱只能保證6個字符和一個個案。

順便說一句,「單一情況」是什麼意思?

+0

如果你剛開始C,你爲什麼想知道K&R? Ansi C89/99更加「理智」和流行。 – Earlz 2009-12-30 16:15:08

+0

我不確定爲了學習C而購買哪本書。我被另一個人告知,K&R可以教我如何完美地用C語言編程,但是到目前爲止,它似乎有時難以理解。它似乎有點含糊,充滿了簡潔和高級的行話。然而,我可能是錯的... – withchemicals 2009-12-30 16:22:08

+3

「K&R C」是K&R書第一版引入的C的原始,現在已經過時的方言。我希望(並且希望!)你實際上有K&R的第二版,它涵蓋了ANSI C.這是一本很好的書,但是自那之後,ANSI C標準又有了更多的版本。這些變化並不大,但值得了解。你現在可以得到一些新的類型,比如布爾和long-longs,而且,是的,瘋狂的短識別限制大大提高了。 Yup! – bobince 2009-12-30 16:29:43

回答

18

單個案例通常意味着「小寫」。除了在某些操作系統中,它的意思是「大寫」。問題是混合的情況不能保證工作。

abcdef 

ABCDEF 

只有情況不同。這不能保證工作。

「意義」問題是多少個字母可以相同的問題之一。

比方說,我們只有6個重要字符。

a_very_long_name 

a_very_long_name_thats_too_similar 

看起來不同,但前16個字符是相同的。由於只有6個是重要的,那些是相同的變量。

+0

你真棒!所以只要確保,這個報價是: 「對於外部名稱,他的標準只保證6個字符和一個個案。「」 是否意味着AbCDeF和abcdef和ABCDEF都不是100%保證是不同的變量?另外,作爲一名初級程序員,我是否應該擔心所提及的「裝配器和裝載器」? – withchemicals 2009-12-30 16:17:24

+2

正確。僅僅因情況而不同的事情不能保證工作。他們可能會工作,但這是一個意外。您不會很快使用匯編程序。您的加載程序是您的操作系統的一部分。大多數裝載機處理很長的名字。當我是一個n00b程序員(在80年代)時,這個6字符的東西在幾個操作系統上是嚴重的。對於標準操作系統(Linux,MacOS等),不用擔心。對於Windows,幾乎不用擔心。 – 2009-12-30 16:55:41

2

這意味着:

foobar1 
foobar2 

可能是相同的外部名字,因爲只有前6個字符需要考慮。單個案例意味着大小寫名稱不需要區分。

請注意,幾乎所有的現代鏈接器都會考慮更長的名稱,依賴於鏈接器,仍然會有一個限制。

3

它只是意味着,如果你有一個名爲

abcdefghijklmnopqrstuvwxyz78901A兩個變量,

abcdefghijklmnopqrstuvwxyz78901B

,有沒有保證,將被視爲不同的,獨立的變量。 ..

5

這意味着你害怕它的意思。對於外部名稱,時間K & R第二版的C標準。寫的確實只會給六個不區分大小寫的字符!所以你不能有afoobaraFooBaz作爲獨立的實體。

這種荒謬的限制(這是爲了適應現在已久的傳統連接器)不再與任何環境相關。 C99標準爲外部名稱提供了31個區分大小寫的字符,內部提供了63個字符,實踐中常用的連接符支持更長的名稱。

0

G'day,

這個有限符號分辨率的問題之一發生在鏈接時。

具有相同名稱的多個符號可以存在於多個庫中,並且鏈接編輯器通常只會找到它找到的第一個符合要查找的符號。

因此,如果您的鏈接編輯器正在搜索符號「a_very_long_name」,並且在其搜索路徑中找到包含符號「a_very_long_name_thats_too_similar」的庫,它將採用這個。即使包含您需要的符號的庫(即「a_very_long_name」)已在您的命令中指定,也會發生這種情況。例如指定庫爲:

-L/my/library/path -lmy_wrong_lib -lmy_correct_lib 

現在有編譯器選項,或者更正確地編譯這是通過對鏈接編輯器,它執行爲您的鏈接路徑的多個符號的搜索時間的推移選項。這些通常會在鏈接時引發錯誤。

另外,許多編譯器,例如gcc,會默認這種行爲。如果找到符號的多個定義,則必須明確啓用多個定義以允許鏈接編輯器繼續進行而不會引發致命錯誤。

順便說一句我強烈建議通過練習與克洛維斯通多的書「The C Answer Book 2nd ed.」一起工作。

這樣做確實有助於讓C堅持在你的腦海中。

HTH

歡呼聲,

相關問題