日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

extent static const

發布時間:2024/9/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 extent static const 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??extern:這就是告訴編譯器,這個變量或函數在別的編譯單元里定義了,也就是要把這個符號放到未解決符號表里面去(外部鏈接)。

?? ??static:如果該關鍵字位于全局函數或者變量的聲明前面,表明該編譯單元不導出這個函數或變量,因些這個符號不能在別的編譯單元中使用(內部鏈接)。如果是static局部變量,則該變量的存儲方式和全局變量一樣,但是仍然不導出符號。?

?? ??默認鏈接屬性:對于函數和變量,默認鏈接是外部鏈接,對于const變量,默認內部鏈接。

?? ??外部鏈接的利弊:外部鏈接的符號在整個程序范圍內都是可以使用的,這就要求其他編譯單元不能導出相同的符號(不然就會報

duplicated external symbols)。

?? ??內部鏈接的利弊:內部鏈接的符號不能在別的編譯單元中使用。但不同的編譯單元可以擁有同樣的名稱的符號。

?? ??為什么頭文件里一般只可以有聲明不能有定義:頭文件可以被多個編譯單元包含,如果頭文件里面有定義的話,那么每個包含這頭文件的編譯單元都會對同一個符號進行定義,如果該符號為外部鏈接,則會導致duplicated external symbols鏈接錯誤。?

?? ??為什么公共使用的內聯函數要定義于頭文件里:因為編譯時編譯單元之間互不知道,如果內聯被定義于.cpp文件中,編譯其他使用該函數的編譯單元的時候沒有辦法找到函數的定義,因些無法對函數進行展開。所以如果內聯函數定義于.cpp里,那么就只有這個.cpp文件能使用它。


對于函數和變量,默認的是外部鏈接,但是如果是const 變量,則是內部鏈接。const和static就是把變量變為內部變量,外部不可以用。但是extent const變量,外部可以用,但是不能修改。

例如:

在t.cpp的定義如下:

int at = 7;

const int c = 9;

extern const int bt = 3;


在main.cpp

extern int at;//全局變量都是外部變量,其他編譯單元只要加extern就可以引用。所以extern的作用就是,這個變量不是在本編譯單元定義的
extern void f();//和全局變量一樣
int bt = 8;//


int main() {

cout<<at<<endl;
?? f();
?
?? cout<<d<<endl;
?? ?return 0;?

}



總結

以上是生活随笔為你收集整理的extent static const的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。