外部函式:如果在當前檔案中定義的函式允許其他檔案訪問、呼叫,就稱為外部函式。c語言規定,不允許有同名的外部函式。
內部函式:如果在當前檔案中定義的函式不允許其他檔案訪問、呼叫,只能在內部使用,就稱為內部函式。c語言規定不同的原始檔可以有同名的內部函式,並且互不干擾。
1> 預設情況下所有函式都是外部函式
2> 不允許有同名的外部函式
1> 允許不同檔案中有同名的內部函式
static對函式的作用:
1> 定義乙個內部函式
2> 宣告乙個內部函式
extern對函式的作用:
1> 完整地定義乙個外部函式
2> 完整地宣告乙個外部函式
(extern可以省略,預設情況下宣告和定義的函式都是外部函式)
例如,main.c
// 宣告乙個test函式
// 完整地宣告乙個外部函式
// extern可以省略
//extern void test();
void test();
//void test2();
int main()
//void test()
//static void test2()
one.c
#include // 宣告乙個內部函式
static void test2();
// 完整地定義乙個外部函式
/*extern void test()
*/// 預設情況下,所有的函式都是外部函式,所以可以省略extern
void test()
// 定義乙個內部函式
static void test2()
1.定義內部函式
從上面的例子可以看出,one.c中定義的one函式是可以被其他原始檔訪問的。其實有時候,我們可能想定義乙個"內部函式",也就是不想讓其他檔案訪問本檔案中定義的函式。這個非常簡單,你只需要在定義函式的時候加個static關鍵字即可。
#include static void test();
int main(int argc, const char * argv)
static void test()
1.static
* 在定義函式時,在函式的最左邊加上static可以把該函式宣告為內部函式(又叫靜態函式),這樣該函式就只能在其定義所在的檔案中使用。如果在不同的檔案中有同名的內部函式,則互不干擾。
* static也可以用來宣告乙個內部函式
2.extern
* 在定義函式時,如果在函式的最左邊加上關鍵字extern,則表示此函式是外部函式,可供其他檔案呼叫。c語言規定,如果在定義函式時省略extern,則隱含為外部函式。
* 在乙個檔案中要呼叫其他檔案中的外部函式,則需要在當前檔案中用extern宣告該外部函式,然後就可以使用,這裡的extern也可以省略。
全域性變數分2種:
1> 預設情況下,所有的全域性變數都是外部變數
1> 不同檔案中的同名外部變數,都代表著同乙個變數
1> 不同檔案中的同名內部變數,互不影響
static對變數的作用:
定義乙個內部變數
extern對變數的作用:
宣告乙個外部變數
static對函式的作用:
定義和宣告乙個內部函式
extern對函式的作用:
定義和宣告乙個外部函式(可以省略)
例如,
#include void test();
// 定義乙個外部變數
//int a; 這麼多個a都是代表同乙個a
//int a;
//int a;
//int a;
//int a;
// 定義乙個內部變數
static int b;
// 宣告乙個外部變數
//extern int a;
int main()
int a;
#include int a;
static int b;
void test()
static修飾區域性變數
1. 延長區域性變數的生命週期:程式結束的時候,區域性變數才會被銷毀
2 .並沒有改變區域性變數的作用域
3 .所有的test函式都共享著乙個變數b
static修飾區域性變數的使用場合:
1.如果某個函式的呼叫頻率特別高
2.這個函式內部的某個變數值是固定不變的
#include void test()
int main()
test();
test();
test();
return 0;
}
1.extern可以用來宣告乙個全域性變數,但是不能用來定義變數
2.預設情況下,乙個全域性變數是可以供多個源檔案共享的,也就說,多個原始檔中同名的全域性變數都代表著同乙個變數
3.如果在定義全域性變數的時候加上static關鍵字,此時static的作用在於限制該全域性變數的作用域,只能在定義該全域性變數的檔案中才能使用,跟其他原始檔中的同名變數互不干擾
c語言extern詳解
1 變數 extern int a 宣告乙個全域性變數a int a 定義乙個全域性變數a extern int a 0 定義乙個全域性變數a 並給初值。int a 0 定義乙個全域性變數a,並給初值,定義只能出現在一處。不管是int a 還是extern int a 0 還是int a 0 都只能...
c語言static與extern的用法
一,static和extern 大工程下我們會碰到很多原始檔。檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c檔案中,全域性變數sum的...
c語言static與extern的用法
一,static和extern 大工程下我們會碰到很多原始檔。檔案a.c static int i 只在a檔案中用 int j 在工程裡用 static void init 只在a檔案中用 void callme 在工程中用 上面的全域性i變數和init 函式只能用在a.c檔案中,全域性變數sum的...