- UID
- 390967
- 帖子
- 1595
- 主題
- 822
- 精華
- 0
- 積分
- 854
- 楓幣
- 11017
- 威望
- 395
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2680
- 閱讀權限
- 150
- 在線時間
- 189 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-11-22
|
本帖最後由 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,表示變數在文件之外 |
|