C語音中,static 關鍵字的用法.兩個疑問
阿新 • • 發佈:2018-12-13
static修飾全域性變數只能在本檔案中使用。如果一個全域性變數,它既可以在本原始檔中被訪問到,也可以在同一個工程的其它原始檔中被訪問就需要用到extern.
// ------ file: m.c #include <iostream> extern void print1(); extern void print2(); int main() { print1(); print2(); } // ---- file: c1.c #include "x.h" #include <iostream> void print1() { a = 1; std::cout << __FILE__ << "a is " << a << std::endl; } // ---- file: c2.c #include "x.h" #include <iostream> void print2() { std::cout << __FILE__ << "a is " << a << std::endl; } // ------ file: x.h #ifndef XXX #define XXX static int a = 123; #endif
用g++ m.c c1.c c2.c -o m
編譯,生產m可執行檔案.
輸出:
$ ./m
c1.ca is 1
c2.ca is 123
有兩個疑問?
1,為什麼 c1.c 中,a沒有宣告,怎麼能被賦值呢?
2. print2() 打印出來的為什麼不是1呢?
解決了
在C系統的程式語言中,#include是為了宣告在這個地方插入別的檔案中的程式碼。
將#include展開後,在每一.c檔案中都會存在a變數. 都是相互獨立的.
都是存在不同的檔案中.
https://bbs.csdn.net/topics/392467558