冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 890|回覆: 0
打印 上一主題 下一主題

[心得] [C] C程式宣告定義、static與extern修飾詞

[複製鏈接]

822

主題

0

好友

854

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1595
主題
822
精華
0
積分
854
楓幣
11017
威望
395
存款
10100
贊助金額
1800
推廣
0
GP
2680
閱讀權限
150
在線時間
189 小時
註冊時間
2023-5-18
最後登入
2024-11-22

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章

跳轉到指定樓層
1
發表於 2023-6-1 19:16:44 |只看該作者 |倒序瀏覽
本帖最後由 whitefox 於 2023-6-1 19:23 編輯

宣告&定義 ( Declarations & Definitions )

+--------------------------------------------------------------------------------------------------------------------+
|         | 全域變數     | 函式                                    | 編譯器行為 Compiler Behavior                |
|-------+---------------+-------------------------------------+----------------------------------------------------|
| 宣告  | extern int i; | void function(void);               | 只告知 compiler 變數/函式的存在,       |
|       |                   | 或 extern void function(void); | 和告知變數/函式的型態。                       |
|-------+---------------+-------------------------------------+----------------------------------------------------|
| 定義 | int i;            | void function(void) {..內容..}  | 命令 compiler 為變數/函式分配儲存空間。|
|      |                   |                                            | (當然也得知變數/函式的存在與型態)         |
+--------------------------------------------------------------------------------------------------------------------+

C++有二個基本的原則:
1.對於變數或函數,可以宣告多次,但只能定義一次。
2.C++中,尋找變數或函數時,是採用Lookup(向上尋找定義或宣告)。

有幾點注意的事項:
1.C++ 中只允許變數或函數的定義出現一次。由於變數只有定義規則,沒
   有宣告規則,所以當你鍵入int a;時,代表此變數已經被定義了。我們如
   何宣告一個變數呢?加上extern 變成exern int a;,告訴comipler,此變數a只
   是一個宣告,它的定義在別處。

2.函數規則分成宣告與定義二種。當一個函數只有傳回值、名稱、傳入  
   值, 沒有大括號{},compiler會把此種形式當成是函數宣告;如果加上了  
   {}, 形成函數定義。所以你要宣告一個函數,只須 鍵入 int f();,extern可
   加 可不加,compiler會自動把它示為函數宣告。

-- static 用法 --

+-----------------------------------------------------------+
| 修飾對象 | 使用時機 | Linkage  | Scope              |
|------------+------------+-----------+--------------------|
| 變數       | 函式裡    | internal | Block                 |
|              | 函式外    | internal | File                    |
|              | 類別成員 | external | Class (for C++)  |
|-----------+------------+-----------+---------------------|
| 函式      | 全域        | internal  | File                   |
|             | 類別成員  | external | Class  (for C++) |
+------------------------------------------------------------+

1. 在localation時使用:更改變數lifetime
用在區域變數時,他可以改變區域變數的生命週期,讓他不會出了scope即被回收
2. 在Global時使用:更改變數scope
用在全域變數宣告時,會從global scope變成file scope,也就是只有這個"檔案"可以使用,其他link的目標檔則無法使用
3. 在Class時使用:讓member是Perclass
當在class的member使用static修飾子的時候代表,這個member是全部的instance都可以share的,class不需要產生instance就可以使用

-- extern 用法 --
變數使用前要先宣告(declaration),C 的 extern 關鍵字,用來表示此變數已經在別處定義(definition),告知程式到別的地方找尋此變數的定義(可能在同一個檔案或其他檔案)。

想要宣告一全域變數讓其他文件 (.c 或 .cpp) 共同使用,必須在型態前加上 extern,表示變數在文件之外
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-22 23:43

回頂部