1. 程式人生 > >在C語言中,static靜態變數,extern外部變數的區別

在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外部變數就是大家所說的全域性變數,可以在程式原檔案中使用的變數