——摘自《深入理解計算機系統》第七章7.5
我自己再補充兩句,如果在一個文件中用extern屬性聲明一個變量或函數,那麼這個變量或函數就可以被其他模塊中的函數所引用。如果一個變量在一個模塊中但不是在這個模塊的漢書中定義,那麼這個變量可以被這個模塊中的任何函數所引用(也就是其爲模塊中的全局變量),但是不能被這個模塊以外的函數引用。類似地,函數也是如此。另外,在一個模塊的函數內是否用static屬性定義變量,該變量的存儲方式是不一樣的。如果在函數內不用static屬性定義變量,則變量在棧中創建。函數的生命週期一結束,該變量也就over了。而用static屬性定義變量,該變量會存儲在靜態存儲區(可能是堆中),函數一完其也跟着完。但是正如以上所言,其他函數無法訪問或引用該函數的這個static變量。