C的內部函式和外部函式

2021-07-17 00:01:40 字數 2096 閱讀 6136

函式本質上是全域性的,但可以限定函式能否被別的檔案所引用。當乙個源程式由多個原始檔組成時,c語言根據函式能否被其它原始檔中的函式呼叫,將函式分為內部函式和外部函式。 1

內部函式

如果在乙個原始檔中定義的函式,只能被本檔案中的函式呼叫,而不能被同一程式其它檔案中的函式呼叫,這種函式稱為內部函式。

定義乙個內部函式,只需在函式型別前再加乙個

「static」

關鍵字即可,如下所示:

static

函式型別

函式名(函式引數表) 

關鍵字「static」

,譯成中文就是

「靜態的

」,所以內部函式又稱靜態函式。但此處

「static」

的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案。

使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名,因為同名也沒有關係。 2

外部函式

外部函式的定義:在定義函式時,如果沒有加關鍵字

「static」

,或冠以關鍵字

「extern」

,表示此函式是外部函式:

[extern]

函式型別

函式名(函式引數表) 

呼叫外部函式時,需要對其進行說明:

[extern]

函式型別

函式名(引數型別表

)[,函式名

2(引數型別表

2)……];例

2外部函式應用。(1

)檔案mainf.c

main()

(2)檔案subf1.c

extern void input(……)  

(3)檔案

subf2.c

extern void process(……)  

(4)檔案

subf3.c……

extern void output(……)  

例3陣列排序

----

簡單選擇排序

file1.c

main()

file2.c

void sort(int

array,int

n)  }

}多個源程式檔案的編譯和連線 (

1)一般過程

編輯各原始檔→建立

project

(專案)檔案

→設定專案名稱

→編譯、連線,執行,檢視結果。(2

)建立project

(專案)檔案

用編輯原始檔相同的方法,建立乙個擴充套件名為

.prj

的專案檔案:該檔案中僅包括將被編譯、連線的各源檔名,一行乙個,其副檔名

.c可以預設;檔名的順序,僅影響編譯的順序,與執行無關。

注意:如果有某個(些)原始檔不在當前目錄下,則應在檔名前冠以路徑。 (

3)設定專案名稱

開啟選單,選取

project

/project name

,輸入專案檔名即可。(4

)編譯、連線,執行,檢視結果

與單個原始檔相同。編譯產生的目標檔案,以及連線產生的可執行檔案,它們的主檔名,均與專案檔案的主檔名相同。

注意:當前專案檔案除錯完畢後,應選取

project

/clear project

,將其專案名稱從

「project name」

中清除(清除後為空)。否則,編譯、連線和執行的,始終是該專案檔案!(5

)關於錯誤跟蹤

預設時,僅跟蹤當前乙個源程式檔案。如果希望自動跟蹤專案中的所有原始檔,則應將

options

/environment

/message tracking

開關置為

「all files 」

:連續按回車鍵,直至

「all files」

出現為止。此時,滾動訊息視窗中的錯誤資訊時,系統會自動載入相應的原始檔到編輯視窗中。

也可關閉跟蹤(將

「message tracking」

置為「off」)

。此時,只要定位於感興趣的錯誤資訊上,然後回車,系統也會自動將相應原始檔載入到編輯視窗中。

C 內部函式和外部函式

函式本質上是全域性的,因為乙個函式要被另外的函式呼叫,但是,也可以指定函式只能被本檔案呼叫,而不能被其他檔案呼叫。根據函式能否被其他原始檔呼叫,將函式區分為內部函式和外部函式。如果乙個函式只能被本檔案中其他函式所呼叫,它稱為內部函式。在定義內部函式時,在函式名和函式型別的前面加static。函式首部...

C 內部函式和外部函式

函式本質上是全域性的,因為乙個函式要被另外的函式呼叫,但是,也可以指定函式只能被本檔案呼叫,而不能被其他檔案呼叫。根據函式能否被其他原始檔呼叫,將函式區分為內部函式和外部函式。如果乙個函式只能被本檔案中其他函式所呼叫,它稱為內部函式。在定義內部函式時,在函式名和函式型別的前面加static。函式首部...

內部函式和外部函式

內部函式 如果乙個函式只能被本檔案中其它函式所呼叫,它稱為內部函式。在定義內部函式時,在函式名和函式型別的前面加static。內部函式又稱靜態函式。使用內部函式,可以使函式只侷限於所在檔案,如果在不同的檔案中有同名的內部函式,互不干擾。這樣不同的人可以分別編寫不同的函式,而不必擔心所用函式是否會與其...