1. 程式人生 > >C語音中,static 關鍵字的用法.兩個疑問

C語音中,static 關鍵字的用法.兩個疑問

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