2017-04-19 79 views
9

Storage-class specifiers爲什麼使用Storage-Class說明符來確定兩個獨立的屬性?

存儲類說明確定他們宣稱的名字兩個獨立的特性:存儲時間和聯動。

因此,例如,當static關鍵字的全局變量和函數使用(誰是存儲類是靜態反正)它設置了聯動,內部聯動。當用於函數內部的變量(沒有鏈接)時,它將它們的存儲類設置爲靜態。

我的問題是:爲什麼兩個事物使用相同的說明符?

+0

可能是因爲兩個獨立的屬性很少需要獨立使用。最後,它問爲什麼C這樣做。 - 我懷疑是爲了簡單,它與當時的藝術相匹配。 – chux

+0

@chux,你能詳細說一下嗎?我不明白爲什麼「這兩個獨立的屬性很少需要獨立使用」。我不明白靜態存儲和內部鏈接之間的關係,以及爲什麼這兩者緊密結合。 –

+0

希望下面的答案(s)就足夠了。 – chux

回答

8

其原因大多是歷史性的:連接進入C語言的設計中作爲事後的想法。在早期的版本中,你可以重新聲明全局變量多次如你所願,和連接器將合併所有這些聲明爲您提供:

裏奇的初衷一直C'S規則上FORTRAN COMMON聲明,模型的理論,任何可以處理FORTRAN的機器都會爲C做好準備。在公共塊模型中,可以多次聲明一個公共變量;相同的聲明由鏈接器合併。 (source

單個聲明的當前規則隨後與extern關鍵字一起出現。那時候有一段C代碼足夠重要,以使向後兼容性變得重要。這可能是語言設計師爲什麼不採用新關鍵字來處理鏈接的原因,而是重新使用static

+2

啊'COMMON'聲明 - shuddder。 – chux

相關問題