冰楓論壇

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

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

[複製鏈接]

1114

主題

0

好友

1042

積分

高級贊助會員

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

UID
390967
帖子
2182
主題
1114
精華
0
積分
1042
楓幣
26484
威望
578
存款
10100
贊助金額
1800
推廣
0
GP
3799
閱讀權限
150
在線時間
272 小時
註冊時間
2023-5-18
最後登入
2025-12-25

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

跳轉到指定樓層
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-2025 冰楓論壇, All rights reserved

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

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

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

GMT+8, 2025-12-26 00:40

回頂部