基礎(chǔ)總結(jié)

變量 常量 ?宏 原文鏈接:http://www.lxweimin.com/p/f83335e036b5



首先,extern和static完全不同,extern不能定義一個變量,extern表示的是“已經(jīng)存在一個變量,但是不在當前的編譯單元內(nèi),需要在其他編譯單元中尋找。”static會定義一個變量,但是分成多種情況。

static 修飾局部變量:延長布局變量的生命周期

static 修飾全局變量:當前變量只能在當前文件中使用

static 修飾函數(shù):? 函數(shù)只能在當前文件中使用

---------------------------------------------------------------------

先說extern 和 變量的關(guān)系。

先說只有一個文件(編譯單元)的:

int i=10; //這個是定義一個全局變量,值為10

extern int i=10;? //這個是錯誤的,變量已經(jīng)存在,怎么賦初值呢?

extern int i; //這個和第一句 int i=10; 可以同時存在在一個文件中。

再說跨文件(多個編譯單元)的:

文件一:(假設(shè)這個文件沒有錯誤!!)

int a=10;

文件二:

extern int a; // 這個正確

extern float a; // 這個編譯不會錯,賦值會怎樣呢?

extern int b; //這個找不到

int a=9; //這個出錯,全局變量多次定義

int a; //同上

static int a=9; //這個正確,這個產(chǎn)生一個僅在文件二中有效的全局變量a,初值為9,注意在文件二中將看不到那個值為10的全局變量!!!!

static就是剛才說的最后一種,此外就是函數(shù)內(nèi)的使用了,不再多說了。

特別的,這樣是錯誤的:

a.c:

static int x=10;

b.c:

extern int x; //因為x只在a.c中,b.c中根本看不到x,所以這個extern還是找不到x,因此會在鏈接時報錯。

其他:extern盡量寫到.h文件中,寫到.c里就是錯誤的種子,以后它只能得到苦果!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 1. 程序運行模式 當我們將一個程序交給CPU去執(zhí)行的時候,CPU只會執(zhí)行main函數(shù)中的代碼,別的地方的代碼是不...
    xx_cc閱讀 2,787評論 2 20
  • 1、@synthesize @dynamic 的區(qū)別 @property有兩個對應的詞,@synthsize @d...
    Bruce_XHG閱讀 652評論 0 2
  • 、6一、基本知識 1.JDK和JRE的區(qū)別 答:JDK是java語言開發(fā)工具包,包含JRE和開發(fā)工具(javac....
    夢游的沙師弟閱讀 1,217評論 0 4
  • 1.項目經(jīng)驗 2.基礎(chǔ)問題 3.指南認識 4.解決思路 ios開發(fā)三大塊: 1.Oc基礎(chǔ) 2.CocoaTouch...
    陽光的大男孩兒閱讀 5,031評論 0 13
  • 我想,跟我家的每一個人都擁抱,我爹,我娘,我的兩個姐姐,我哥哥,我嫂子。我想對他們說,我想你們了。 今晚就在剛才,...
    綻放娜娜閱讀 311評論 0 0