A. 在c語言中,外部函數與文件包含的區別
外部函數extern時聲明這個函數為外部函數,本文件不做定義,只調用,編譯不會出錯,但不能運行(沒有函數實體)。。。。如果想有運行結果就必須將函數實體包含進來,所以文件包含和extern是配合使用的。。。文件包含只需要包含.h就是實體的頭文件,但有些軟體貌似不能識別頭文件和c的關系,所以就只能包含.c文件。。。
也就是說外部函數extern只是個聲明,他告訴編譯器我用到了一個外部函數,但如果該文件沒有將函數實體包含進來,編譯器是找不到的,依然是不能運行的,所以extern只是個聲明,並沒有做任何事,只是這樣是沒用的。。。。
include是包含一個文件,就是類似於該文件復制到此處(只是說類似,其實是個查找路徑,讓編譯器去該路徑查找函數),就這么簡單功能。。。。
B. C語言裡面的靜態函數 和 函數有區別嗎
靜態函數是函數的一種,函數包括靜態函數和非靜態函數兩種。
其中靜態函數是有static修飾的函數,如果沒有,則為非靜態函數(全局函數)。
當整個程序只有一個C文件時,二者沒有區別。
當程序是由多個C文件組成時,二者的作用域,即可使用的范圍不同。
其中,靜態函數(帶static的),只能在本文件中使用,無法跨文件。
而非靜態函數(不帶static的),可以在任何一個文件中使用。當在其它文件中使用時,需要做函數聲明後再使用。
C. C語言代碼的頭文件與源文件有什麼區別
頭文件和源文件在本質上沒有任何區別。 只不過一般:後綴為 .h 的文件是頭文件,內含函數聲明、宏定義、結構體定義等內容。後綴為 .c 的文件是源文件,內含函數實現,變數定義等內容。而且是什麼後綴也沒有關系,只不過編譯器會默認對某些後綴的文件採取某些動作。這樣分開寫成兩個文件是一個良好的編程風格。
簡單的說其實要理解C文件與頭文件(即.h)有什麼不同之處,首先需要弄明白編譯器的工作過程,一般說來編譯器會做以下幾個過程:
①預處理階段
②詞法與語法分析階段
③ 編譯階段,首先編譯成純匯編語句,再將之匯編成跟CPU相關的二進制碼,生成各 個目標文件 (.obj文件)
④連接階段,將各個目標文件中的各段代碼進行絕對地址定位,生成跟特定平台相關 的可執行文件,當然,最後還可以用obj生成純二進制碼,也就是去掉了文件格 式信 息。(生成.exe文件)
3.比方說 在aaa.h里定義了一個函數的聲明,然後在aaa.h的同一個目錄下建立aaa.c , aaa.c里定義了這個函數的實現,然後是在main函數所在.c文件里#include這個aaa.h 然後我就可以使用這個函數了。 main在運行時就會找到這個定義了這個函數的aaa.c文件。這是因為:main函數為標准C/C++的程序入口,編譯器會先找到該函數所在的文件。假定編譯程序編譯myproj.c(其中含main())時,發現它include了mylib.h(其中聲明了函數void test()),那麼此時編譯器將按照事先設定的路徑(Include路徑列表及代碼文件所在的路徑)查找與之同名的實現文件(擴展名為.cpp或.c,此例中為mylib.c),如果找到該文件,並在其中找到該函數(此例中為void test())的實現代碼,則繼續編譯;如果在指定目錄找不到實現文件,或者在該文件及後續的各include文件中未找到實現代碼,則返回一個編譯錯誤.其實include的過程完全可以「看成」是一個文件拼接的過程,將聲明和實現分別寫在頭文件及C文件中,或者將二者同時寫在頭文件中,理論上沒有本質的區別。以上是所謂動態方式。對於靜態方式,基本所有的C/C++編譯器都支持一種鏈接方式被稱為Static Link,即所謂靜態鏈接。在這種方式下,我們所要做的,就是寫出包含函數,類等等聲明的頭文件(a.h,b.h,...),以及他們對應的實現文件(a.cpp,b.cpp,...),編譯程序會將其編譯為靜態的庫文件(a.lib,b.lib,...)。在隨後的代碼重用過程中,我們只需要提供相應的頭文件(.h)和相應的庫文件(.lib),就可以使用過去的代碼了。相對動態方式而言,靜態方式的好處是實現代碼的隱蔽性,即C++中提倡的「介面對外,實現代碼不可見」。有利於庫文件的轉發.
D. C語言中函數和函數體的區別是什麼
C語言中函數和函數體的區別為:傳遞參數不同、返回值不同、調用不同。
一、傳遞參數不同
1、函數:函數具有明確的入口傳遞參數。
2、函數體:函數體沒有明確的入口傳遞參數,內部進行定義和說明。
二、返回值不同
1、函數:函數可以有返回值也可以設為void,不返回返回值。
2、函數體:函數體沒有返回值。
三、調用不同
1、函數:由主函數調用其他函數,其他函數也可以互相調用。同一個函數可以被一個或多個函數調用任意多次。
2、函數體:函數體可以調用一個或多個函數,但函數體之間不能互相調用。
E. 在C語言中,內部函數和外部函數的區別
內部函數跟外部函數的區別在於:一個文件中定義的函數能否被其它文件調用。能被調用的函數在前面加extern(一般省略),而不能被調用的加static(不能省略),通常函數本質上是全局的,也就是外部的可調用的。
我們通常調用的#include本質上就是一些外部函數的集合,由於在一個文件中的函數要調用另外一個文件的函數,要求在開始聲明一下,為了省略這些聲明,我們引用include命令。
F. 簡述c語言中函數共有哪幾種類型,各有何區別
如C語言中:
int max(int x,int y)
{
return(x>yx:y;);
}
就是一段比較兩數大小的函數,函數有參數與返回值。C++程序設計中的函數可以分為兩類:帶參數的函數和不帶參數的函數。這兩種參數的聲明、定義也不一樣。
帶有(一個)參數的函數的聲明:
類型名標示符+函數名+(類型標示符+參數)
{
}
不帶參數的函數的聲明:
void+函數名( )
{
}
花括弧內為函數體。
帶參數的函數有返回值,不帶參數的沒有返回值。
C++中函數的調用:函數必須聲明後才可以被調用。調用格式為:函數名(實參)調用時函數名後的小括弧中的實參必須和聲明函數時的函數括弧中的形參個數相同。有返回值的函數可以進行計算,也可以做為右值進行賦值。
C語言中的部分函數:
main(主函數)
max(求最大數的函數)
scanf(輸入函數)
printf(輸出函數)
G. C語言:內部函數和外部函數所說的不同文件是什麼謝謝
不同的.c文件(源文件)
H. C語言的程序、文件、函數之間的關系
程序是指你為了完成你的功能而編寫的項目代碼。
文件是信息的保存方式,包括程序文件、庫文件、數據文件等。廣義上說,設備也包含在文件的定義裡面。
由於程序規模可能非常大,編程時往往將將代碼劃分成若干模塊,每一模塊對應一個子功能,這樣也方便實現程序代碼的復用。這一一個模塊,在形式上就體現為函數。——如果規模再大一些,可能還需要將一些相關的類封閉成類庫,以方便調用,進一步提高程序的復用性。
這些只是經驗,談不上理論,也沒必要去鑽牛角尖。程序多寫一些,你自然就明白了。