2010-10-03 65 views
0

文件:靜態字段 - 初始化和改變給定的值

// file: q7a.h 
static int err_code = 3; 
void printErrCode(); 
///////////// END OF FILE ///////////////// 
// file: q7a.c 
#include <stdio.h> 
#include "q7a.h" 
void printErrCode() 
{ 
printf ("%d ", err_code); 
} 
///////////// END OF FILE ///////////////// 
// file: q7main.c 
#include "q7a.h" 
int main() 
{ 
err_code = 5; 
printErrCode(); 
return 0; 
} 
///////////// END OF FILE ///////////////// 

輸出是:

3 

我的問題是爲什麼輸出不是5? 謝謝。

回答

4

靜態全局對象的範圍僅限於當前編譯單元。在這種情況下,您有兩個編譯單元,每個.c文件一個編譯單元,每個編譯單元都有自己的err_code。

3

關鍵字err_codestatic指定靜態鏈接,即該變量對於翻譯單元是本地的。

當你單獨編譯文件q7a.cq7main.c時,會有兩個不同的err_code變量。因此,q7a.c中的函數printErrCode正在使用err_code,僅在q7a.c範圍內可見。

0

輸出不是5,,因爲全局變量很差

試試這個,而不會有任何聲明err_code和main()更換電話:

void printErrCode (int err_code) 
{ 
    printf ("%d ", err_code); 
} 

int main() 
{ 
    /* ... */ 
    printErrCode(5); 
    /* ... */ 
}