在C語言中,static靜態變數,extern外部變數的區別
1:什麼是static
static,叫做靜態變數。一般用於全域性變數裡面,首先,我們來考慮一下為什麼要用到static,我們可以想一下,一個專案其實是由很多位工程師一起來完成的,他們之間是互相獨立完成自己所要完成的一個模組的,這就有可能出現定義相同的全域性變數或者全域性函式名(記住,我這邊所說的全域性變數指的是針對各自工程師的模組中),這樣一旦整合到一起就會出現編譯報錯,因為會有相同的變數或者函式。
只要我們在定義函式或者定義變數的時候,在前面加上static,就代表說你所定義的變數或者函式是侷限於該源程式檔案中。這就是原因。我們來看一下下面的例子
這是庫檔案A.h
#include <stdio.h>
static int called();
void printStr();
這是程式A.c
#include "A.h"
static int called()
{
return 6;
}
void printStr()
{
int returnVal;
returnVal = called();
printf("returnVal=%d\n",returnVal);
}
然後我們在B.c中呼叫上面的檔案
#include "A.h"
int main()
{
int val;
val = called();
printStr();
return 0;
}
此時要是編譯的話就會出現錯誤,這裡我就不把結果發出來,他會提示called沒有被定義。要修改如下
#include "A.h"
int main()
{
printStr();
return 0;
}
這樣的話就不會出現報錯,因為calle是一個被定義了static的函式,只能在A.c原始檔中使用,不允許其他的呼叫。
相關的靜態變數類似,我就不在演示了
2.extern外部變數
其實extern外部變數就是大家所說的全域性變數,可以在程式原檔案中使用的變數