SOGO論壇
  登入   註冊   找回密碼
查看: 503|回覆: 0
列印 上一主題 下一主題

[技術文章] static 變數與函數 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-21 10:20:32 |只看該作者 |倒序瀏覽
區域變數的定義加上 static,其使用範圍與沒有加上 static 是沒有區別的,但是其生命期就 如同 全域變數一樣,以下例來解說:

例 6.

   
  int square(int i)  
  { static int count=0;

    count++;
    return i*i;
  }

說明:
函數 square 中含一 static 區域變數 count。
變數 count 於編譯後就存在了。
變數 count 不管函數 square 呼叫 多少次, 僅 initialize 一次。每呼叫函數 square 一次, 變數 count 就增加 1。
count 可以說是 專屬於 函數 square 的全域變數。
全域變數 的定義加上 static,則 該變數 就 變成 專屬於 該檔案 的 全域變數,其它檔案 就 無法 引用該 變數, 即 其它檔案 就不能 含有 該變數的 extern 指令。

例 7. 設有三個檔案 file.h、 file.c 及 main.c 其內容分別如下:

檔案 file.h 含

  
void Add(int n);
void Mult(int n);
int get();


檔案 file.c 含
#include "file.h"
static int s=0;
void Add(int n) {s=s+n;}
void Mult(int n) {s=s*n;}
int get(){return s;}


檔案 main.c 含
#include < stdio.h >
#include "file.h"
void main()
{Add(5);
  Mult(10);
  printf("s=%d\n",get());
}

說明:
檔案 file.c 含一 static 全域變數 s,該 變數 僅能於 file.c 引用。
檔案 main.c 不可加上 extern int s; 而引用變數 s。
程式執行的結果為
  s=50

C++ 程式 class 的設計方式 非常類似 file.c 與 file.h 的架構,變數 s 就如同一個 private 的 data member。
一個函數的定義加上 static, 該 函數 也就變成 專屬該檔案 的函數,其它檔案 就無法 呼叫該函數,於 C++ class 的設計,就好像一個 private 的 member function。
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-4-27 22:04

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部