1. 程式人生 > >C語言中的連結屬性

C語言中的連結屬性

當組成一個程式的各個原始檔分別被編譯之後,所有的目標檔案以及那些從一個或多個函式庫中引用的函式連結在一起,形成可執行程式。如果相同的識別符號出現在幾個不同的原始檔中時,它們是表示同一個變數還是不同的變數呢?這個就取決於識別符號的連結屬性(linkage)。要注意的是,識別符號的作用域與連結屬性有關,但這兩個屬性不相同。

連結屬性一共有3種:external(外部)internal(內部)none()

1、沒有連結屬性的識別符號(none)總是被當作單獨的個體,也就是說該識別符號的多個宣告被當作獨立不同的實體。

2、屬於internal連結屬性的識別符號在同一個原始檔內的所有宣告中指同一個實體,但位於不同原始檔的多個宣告則屬於不同的實體。使用

static關鍵字來宣告一個internal型別的識別符號。static只對預設連結屬性為external的宣告才有改變連結屬性的效果。static用於宣告區域性變數時,是使這個變數成為靜態變數,就是這個變數在程式的整個執行過程中總是存在的,直到程式結束。

3、屬於external連結屬性的識別符號無論宣告多少次、位於幾個原始檔都表示同一個實體。當extern關鍵字用於原始檔中一個識別符號的第1次宣告時,它指定該識別符號具有external連結屬性。但是,如果它用於該識別符號的第2次或以後的宣告時,它並不會更改由第1次宣告所指定的連結屬性。

參考資料:

C和指標》 Kenneth A.Reek 

著,徐波 譯,人民郵電出版社。