所有函數都是外部的,因為不允許在函數內部定義另一個函數。但定義函數時,可以使用extern或static說明符。
當定義一個函數時,若在函數返回值的類型前加上說明符extern,則稱此函數為“外部”函數。extern說明可以省略,一般的函數都隱含說明為extern。所以,我們之前所定義的函數都屬於外部函數。
外部函數的特征是:可以被其他編譯單位中的函數調用。通常,當函數調用語句與被調用函數不在同一編譯單位,且函數的返回值為非整型時,應該在調用語句所在函數的說明部分用extern對所調用的函數進行函數說明。
當定義一個函數時,若在函數返回值的類型前加上說明符static,則稱此函數為“靜態”函數。
靜態函數的特征是:只限於本編譯單位的其他函數調用它,而不允許其他編譯單位的函數對它進行調用。從這個意義上說,靜態函數又可稱作“內部函數”(內部於本文件的函數)。使用靜態函數可以避免不同編譯單位因函數同名而引起混亂。若強行調用靜態函數,將會產生錯誤信息。