main()中的extem a;改為extem int a; extem用于將用于將其他源文件的函數或變量的作用范圍擴大到整個程序。在定義是不需要,只有在應用前用申明語句申明即可,如extern void print(int n);
為河北等地區用戶提供了全套網頁設計制作服務,及河北網站建設行業解決方案。主營業務為成都做網站、網站建設、河北網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
你也沒說哪不懂,只能回答這么多了,希望對你有幫助
1、外部函數extern時聲明這個函數為外部函數,本文件不做定義,只調用,編譯不會出錯,但不能運行(沒有函數實體)。如果想有運行結果就必須將函數實體包含進來,所以文件包含和extern是配合使用的。文件包含只需要包含.h就是實體的頭文件,但有些軟件貌似不能識別頭文件和c的關系,所以就只能包含.c文件。
2、也就是說外部函數extern只是個聲明,他告訴編譯器我用到了一個外部函數,但如果該文件沒有將函數實體包含進來,編譯器是找不到的,依然是不能運行的,所以extern只是個聲明,并沒有做任何事,只是這樣是沒用的。include是包含一個文件,就是類似于該文件復制到此處(只是說類似,其實是個查找路徑,讓編譯器去該路徑查找函數)。
函數定義好以后,要被其它函數調用了才能被執行。C
語言的函數是能相互調用的,
但在調用函數前,必須對函數的類型進行說明,就算是標準庫函數也不例外。標準庫函數的
說明會被按功能分別寫在不一樣的頭文件中,使用時只要在文件最前面用#include
預處理語
句引入相應的頭文件。如前面一直有使用的
printf
函數說明就是放在文件名為
stdio.h
的
頭文件中。調用就是指一個函數體中引用另一個已定義的函數來實現所需要的功能,這個時候函
數體稱為主調用函數,函數體中所引用的函數稱為被調用函數。一個函數體中能調用數個
其它的函數,這些被調用的函數同樣也能調用其它函數,也能嵌套調用。筆者本人認為
主函數只是相對于被調用函數而言。在
c51
語言中有一個函數是不能被其它函數所調用的,
它就是
main
主函數。調用函數的一般形式如下:
函數名
(實際參數表)
“函數名”就是指被調用的函數。實際參數表能為零或多個參數,多個參數時要用逗
號隔開,每個參數的類型、位置應與函數定義時所的形式參數一一對應,它的作用就是把參
數傳到被調用函數中的形式參數,如果類型不對應就會產生一些錯誤。調用的函數是無參函
數時不寫參數,但不能省后面的括號。
在以前的一些例子我們也能看不一樣的調用方式:
1.函數語句
如
printf
("Hello
World!n");
這是在
我們的第一個程序中出現的,它以
"Hello
World!n"為參數調用
printf
這個庫函數。在這里函數調用被看作了一條語句。
2.函數參數
“函數參數”這種方式是指被調用函數的返回值當作另一個被調用函數的實際參
數,如
temp=StrToInt(CharB(16));CharB
的返回值作為
StrToInt
函數的實際參數傳遞。
3.函數表達式
而在上一篇的例子中有
temp
=
Count();這樣一句,這個時候函數的調用作為一個運算
對象出現在表達式中,能稱為函數表達式。例子中
Count()返回一個
int
類型的返回
值直接賦值給
temp。注意的是這種調用方式要求被調用的函數能返回一個同類型的值,
不然會出現不可預料的錯誤。
前面說到調用函數前要對被調用的函數進行說明。標準庫函數只要用#include
引入已
寫好說明的頭文件,在程序就能直接調用函數了。如調用的是自定義的函數則要用如下形
式編寫函數類型說明
類型標識符
函數的名稱(形式參數表);
這樣的說明方式是用在被調函數定義和主調函數是在同一文件中。你也能把這些寫到
文件名.h
的文件中用#include
"文件名.h"引入。如果被調函數的定義和主調函數不是在同
一文件中的,則要用如下的方式進行說明,說明被調函數的定義在同一項目的不一樣文件之上,
其實庫函數的頭文件也是如此說明庫函數的,如果說明的函數也能稱為外部函數。
extern
類型標識符
函數的名稱(形式參數表);
函數的定義和說明是完全不一樣的,在編譯的角度上看函數的定義是把函數編譯存放在
ROM
的某一段地址上,而函數說明是告訴編譯器要在程序中使用那些函數并確定函數的地
址。如果在同一文件中被調函數的定義在主調函數之前,這個時候能不用說明函數類型。也就
是說在
main
函數之前定義的函數,在程序中就能不用寫函數類型說明了。能在一個函
數體調用另一個函數(嵌套調用),但不允許在一個函數定義中定義另一個函數。還要注意
的是函數定義和說明中的“類型、形參表、名稱”等都要相一致。
工具/材料
Ubuntu16.04
gcc+vim
01
打開Ubuntu,并在目標路徑下開啟一個終端。
02
選定一個路徑,使用touch命令創建三個文件,function.h,function.c,test.c,分別用來做函數頭文件、函數源文件以及測試文件
03
這里以四則運算函數為例說明函數的編寫流程與調用流程。首先用vim命令與vsplit依次打開三個文件。
04
在頭文件中添加重復包含的宏,并添加四則運算的函數聲明。
05
在function.c中將function.h包含進來,并具體實現四個方法。注意出發要對除數是否為0進行判斷。
06
然后編寫測試程序進行測試。總的程序代碼如下:
07
保存所有的程序并退出,使用gcc進行編譯,并運行得到的結果如下。這就是函數的聲明、定義以及調用。
分享名稱:c語言外部函數怎么調 c語言內部函數和外部函數區別
文章鏈接:http://www.2m8n56k.cn/article26/doidhjg.html
成都網站建設公司_創新互聯,為您提供App開發、用戶體驗、靜態網站、建站公司、自適應網站、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯