程式中名字的作用域,通俗的講,就是這個名字在程式中的使用範圍。在c語言中,作用域的規則相對比較簡單,主要分為全域性作用域和區域性作用域兩種。
乙個變數如果定義在函式中,那麼這個變數的作用域就是乙個區域性作用域,在函式外面不能訪問這個變數。在別的函式中定義同名的變數,也不會出現名字衝突,因為它們都處於各自的區域性作用域中。
外部變數或函式的作用域是從宣告的位置開始,到所在檔案的末尾。
如果需要在別的檔案中引用不在gai檔案中定義的外部變數,或者在這個變數定義之前使用,可以通過關鍵字 extern 進行宣告。
extern 修飾符的作用是,告知該變數已經在別的地方定義了。外部變數和函式認具有全域性作用域,所以可以在程式的任何位置進行引用。
main()
int sp = 0;
double val[maxval];
void push(double f) double pop(void)
在上面的**中,sp和val的作用域是從它們定義的位置開始的,所以可以在push和pop函式中引用這兩個變數。而在main函式中,不能直接引用這兩個變數。如果需要引用在後面定義的變數,可以使用關鍵字 extern 宣告需要使用的變數。在上面的**中,如果需要在main中使用sp,則可以這樣宣告:
extern int sp;
宣告和定義的區別:宣告只是告知這個變數的型別,而定義乙個變數,除了告知變數的型別,還會為變數分配儲存空間。在乙個程式中,外部變數的定義只能有一處,而外部變數的宣告可以出現在任何需要引用這個變數的檔案中。通過在檔案中使用 extern 關鍵字宣告乙個變數,可以使用在別的地方宣告的變數。
在c語言中,static修飾符用於定義靜態變數。static除了可以修飾變數外,還可以修飾函式。
對於外部變數和函式,static修飾符會限制它們的作用域,使它們只能在定義它們的檔案中使用,作用域不能傳播到檔案外。
使用static修飾符,提供了一種隱藏名字的方式,可以將名字限定在乙個檔案中,防止名字衝突。
static char buf[bufsize];
static int bufp = 0; int getch(void) void ungetch(int c)
在上面的**中,bufp和buf都只能在函式getch和ungetch中使用,而不能在別的檔案中使用,即使在別的檔案中使用了extern宣告。
static修飾符除了可以修飾外部變數和函式外,也可以作用於區域性變數。通過static修飾的區域性變數,在函式中的儲存空間將不會再函式結束後銷毀,而是一直存在直到程式結束。當程式再次被呼叫時,仍舊可以訪問這個區域的記憶體。
作用域規則
每個 塊都有自己的命名規則。外層 塊的名字總是有效的,除非內層的 塊對它進行了重新定義。如果內層 塊的名字進行了重新定義,那麼在這個內層 塊中,外層 塊的名字被隱藏或遮蔽。塊可以巢狀多層,其深度取決於系統限制。include int main printf 3d 3d 5.1f n a,b,c 4 ...
c語言塊級作用域 C語言 作用域
c語言 作用域 型別作用域 生命週期 auto變數 一對 內 當前函式 static區域性變數 一對 內 整個程式執行期 extern變數 整個程式 整個程式執行期 static全域性變數 當前檔案 整個程式執行期 extern函式 整個程式 整個程式執行期 static函式 當前檔案 整個程式執行...
C語言 作用域
復合語句指if while等條件語句 區域性變數 auto自動變數 auto可寫可不寫 一般情況下 塊 內部定義的變數都是自動變數 全域性變數 在函式外定義,可被本檔案及其它檔案中的函式所共用,若其它檔案中的函式呼叫此變數,須用extern宣告 變數型別 定義位置 宣告週期 區域性變數 函式或復合語...