0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

static關(guān)鍵字的三種用法

撞上電子 ? 2023-11-10 08:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語(yǔ)言中,關(guān)鍵字"static"可以用于不同的上下文,具有不同的作用。以下是"static"在C語(yǔ)言中的主要作用:


1. 靜態(tài)變量(Static Variables):

在C語(yǔ)言中,使用`static`關(guān)鍵字來(lái)聲明靜態(tài)變量是一種常見(jiàn)的用法,它具有以下主要作用:1. 生存期延長(zhǎng):靜態(tài)變量的生存期在程序的整個(gè)運(yùn)行期間,而不僅僅是在聲明它的函數(shù)調(diào)用期間。這意味著靜態(tài)變量會(huì)在程序啟動(dòng)時(shí)分配內(nèi)存,并在程序終止時(shí)釋放內(nèi)存。這與自動(dòng)變量(局部變量)不同,后者的生存期僅限于其所在函數(shù)的執(zhí)行期間。2. 保持狀態(tài):靜態(tài)變量的值在函數(shù)調(diào)用之間保持不變。每次調(diào)用包含靜態(tài)變量的函數(shù)時(shí),該變量的值會(huì)保持在上一次調(diào)用結(jié)束時(shí)的狀態(tài)。這對(duì)于需要在多次函數(shù)調(diào)用之間共享信息的情況非常有用,例如計(jì)數(shù)器或緩存。下面是一個(gè)示例,演示了靜態(tài)變量的作用:

#include

void countCalls() { // 靜態(tài)變量,只初始化一次 static int count = 0; count++; // 每次調(diào)用遞增計(jì)數(shù) printf("Function has been called %d times\n", count);}
int main() { countCalls(); // 輸出:Function has been called 1 times countCalls(); // 輸出:Function has been called 2 timescountCalls();//輸出:Function has been called 3 times
return 0;}

在上面的示例中,`count`是一個(gè)靜態(tài)變量,它在`countCalls`函數(shù)的多次調(diào)用之間保持其值,而不會(huì)在每次函數(shù)調(diào)用時(shí)被重新初始化。這使得我們能夠跟蹤函數(shù)被調(diào)用的次數(shù)。

2. 靜態(tài)函數(shù)(Static Functions):

在C語(yǔ)言中,使用`static`關(guān)鍵字來(lái)聲明靜態(tài)函數(shù)是一種常見(jiàn)的用法,它具有以下主要作用:1. 作用域限制:靜態(tài)函數(shù)的作用域被限制在聲明它的源文件(或編譯單元)內(nèi)部,不能在其他文件中被訪問(wèn)。這有助于確保函數(shù)的私有性,防止其他文件中的代碼無(wú)意或惡意地調(diào)用它。2. 命名空間隔離:靜態(tài)函數(shù)的名稱在整個(gè)程序中具有唯一性,因?yàn)樗鼈冎辉谄湓次募?nèi)部可見(jiàn)。這減少了命名沖突的風(fēng)險(xiǎn),因?yàn)槠渌募锌梢杂邢嗤Q的函數(shù),而不會(huì)導(dǎo)致沖突。3. 模塊封裝:靜態(tài)函數(shù)通常用于實(shí)現(xiàn)文件范圍的輔助功能,以便在同一文件內(nèi)的多個(gè)函數(shù)之間共享代碼,但不希望其他文件能夠訪問(wèn)這些輔助函數(shù)。這有助于將相關(guān)功能封裝在一個(gè)文件中,以提高代碼的模塊化和可維護(hù)性。以下是一個(gè)示例,演示了靜態(tài)函數(shù)的作用:

// 文件: mymodule.c#include // 靜態(tài)函數(shù),只在當(dāng)前文件內(nèi)可見(jiàn)static void helperFunction() { printf("This is a helper function\n");}
void publicFunction() { printf("This is a public function\n"); helperFunction(); // 可以調(diào)用靜態(tài)函數(shù)}// 文件: main.c#include "mymodule.c"
int main() { publicFunction(); // 可以調(diào)用公共函數(shù) // helperFunction(); // 編譯錯(cuò)誤,無(wú)法訪問(wèn)靜態(tài)函數(shù) return 0;}

在上面的示例中,`helperFunction`是一個(gè)靜態(tài)函數(shù),它只能在`mymodule.c`文件中被訪問(wèn)。其他文件(例如`main.c`)無(wú)法訪問(wèn)它,從而確保了它的私有性和模塊封裝性。


3. 靜態(tài)全局變量(Static Global Variables):

在C語(yǔ)言中,使用`static`關(guān)鍵字來(lái)聲明靜態(tài)全局變量是一種常見(jiàn)的用法,它具有以下主要作用:1. 作用域限制:靜態(tài)全局變量的作用域被限制在聲明它的源文件(或編譯單元)內(nèi)部,不能在其他文件中被訪問(wèn)。這使得該變量對(duì)于文件內(nèi)的其他函數(shù)來(lái)說(shuō)是可見(jiàn)的,但無(wú)法在其他文件中訪問(wèn)。這有助于確保全局變量的私有性,防止其他文件無(wú)意或惡意地修改它。2. 數(shù)據(jù)保持性:靜態(tài)全局變量在程序的整個(gè)運(yùn)行期間保持其值,而不會(huì)像普通全局變量那樣被銷毀和重建。這使得它適用于需要保持狀態(tài)的情況,例如跟蹤應(yīng)用程序的配置設(shè)置、日志級(jí)別等信息。3. 命名空間隔離:靜態(tài)全局變量的名稱在整個(gè)程序中具有唯一性,因?yàn)樗鼈冎辉谄湓次募?nèi)部可見(jiàn)。這減少了全局命名沖突的風(fēng)險(xiǎn),因?yàn)槠渌募梢杂邢嗤Q的全局變量,而不會(huì)導(dǎo)致沖突。以下是一個(gè)示例,演示了靜態(tài)全局變量的作用:

// 文件: mymodule.c#include
// 靜態(tài)全局變量,只在當(dāng)前文件內(nèi)可見(jiàn)static int moduleVar = 42;
void modifyModuleVar(int value) { moduleVar = value;}
void printModuleVar() { printf("moduleVar: %d\n", moduleVar);}// 文件: main.c#include "mymodule.c"
int main() { printModuleVar(); // 輸出:moduleVar: 42 modifyModuleVar(100);printModuleVar();//輸出:moduleVar: 100
// moduleVar = 200; // 編譯錯(cuò)誤,無(wú)法訪問(wèn)靜態(tài)全局變量 return 0;}

在上面的示例中,`moduleVar`是一個(gè)靜態(tài)全局變量,它只能在`mymodule.c`文件中被訪問(wèn)。其他文件(例如`main.c`)無(wú)法訪問(wèn)它,從而確保了它的私有性和模塊封裝性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141593
  • static
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    10711
  • 關(guān)鍵字
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    7060
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    micro 關(guān)鍵字搜索全覆蓋商品,并通過(guò) API 接口提供實(shí)時(shí)數(shù)據(jù)

    micro 關(guān)鍵字搜索全覆蓋商品”并通過(guò) API 接口提供實(shí)時(shí)數(shù)據(jù)
    的頭像 發(fā)表于 07-13 10:13 ?190次閱讀

    介紹三種常見(jiàn)的MySQL高可用方案

    在生產(chǎn)環(huán)境中,為了確保數(shù)據(jù)庫(kù)系統(tǒng)的連續(xù)可用性、降低故障恢復(fù)時(shí)間以及實(shí)現(xiàn)業(yè)務(wù)的無(wú)縫切換,高可用(High Availability, HA)方案至關(guān)重要。本文將詳細(xì)介紹三種常見(jiàn)的 MySQL 高可用
    的頭像 發(fā)表于 05-28 17:16 ?365次閱讀

    static在單片機(jī)中的妙用

    不要從字面意思誤以為關(guān)鍵字 static 很安靜,其實(shí)它一點(diǎn)都不安靜。這個(gè)關(guān)鍵字在 C 語(yǔ)言里主要有兩個(gè)作用,下面我們就來(lái)介紹一下 C 語(yǔ)言關(guān)鍵字
    發(fā)表于 04-02 13:50 ?1次下載

    單片機(jī)編程關(guān)鍵字之volatile

    volatile 修飾的變量是說(shuō)這變量可能會(huì)被意想不到地改變。通常對(duì)于程序員而言,單片機(jī) 中用的就算常見(jiàn)了volatile 是易變的,不穩(wěn)定的意思。其實(shí)對(duì)于很多人來(lái)說(shuō),根本沒(méi)見(jiàn)過(guò)這個(gè)關(guān)鍵字,不 知道
    發(fā)表于 04-02 13:47 ?2次下載

    redis三種集群方案詳解

    在Redis中提供的集群方案總共有三種(一般一個(gè)redis節(jié)點(diǎn)不超過(guò)10G內(nèi)存)。
    的頭像 發(fā)表于 03-31 10:46 ?708次閱讀
    redis<b class='flag-5'>三種</b>集群方案詳解

    GaN、超級(jí)SI、SiC這三種MOS器件的用途區(qū)別

    如果想要說(shuō)明白GaN、超級(jí)SI、SiC這三種MOS器件的用途區(qū)別,首先要做的是搞清楚這三種功率器件的特性,然后再根據(jù)材料特性分析具體應(yīng)用。
    的頭像 發(fā)表于 03-14 18:05 ?1087次閱讀

    示波器的三種觸發(fā)模式

    示波器的觸發(fā)方式不僅影響波形捕捉的時(shí)機(jī),還決定了顯示的波形是否穩(wěn)定。 常見(jiàn)的觸發(fā)模式有三種: 單次觸發(fā) (Single)、 正常觸發(fā) (Normal)和 自動(dòng)觸發(fā) (Auto)。下面將對(duì)這三種觸發(fā)
    的頭像 發(fā)表于 01-07 11:04 ?7518次閱讀
    示波器的<b class='flag-5'>三種</b>觸發(fā)模式

    C語(yǔ)言關(guān)鍵字分別發(fā)生在哪個(gè)階段

    在編譯的第一個(gè)階段:預(yù)處理,對(duì)一些宏定義做替換。 第二個(gè),const。 C語(yǔ)言中的 const 用于修飾只讀變量,表示變量本身不能修改。 這個(gè)關(guān)鍵字會(huì)在編譯的第二步起作用,也就是編譯。強(qiáng)行修改一個(gè)只讀變量,編譯就會(huì)提示問(wèn)題。 第個(gè),volatile。 前面講過(guò) vola
    的頭像 發(fā)表于 11-24 10:31 ?589次閱讀

    什么是PID調(diào)節(jié)器的三種模式

    (Proportional)、積分(Integral)和微分(Derivative)。這三種控制動(dòng)作可以單獨(dú)使用,也可以組合使用,形成三種基本的控制模式:比例控制(P)、積分控制(I)和微分控制(D)。 1. 比例控制(P) 比例控制是PID調(diào)節(jié)器中最基本的控制模式。在比
    的頭像 發(fā)表于 11-06 10:38 ?1739次閱讀

    基本放大電路有哪三種

    基本放大電路是電子電路中至關(guān)重要的組成部分,它能夠?qū)⑤斎胄盘?hào)放大到所需的電平,以便后續(xù)電路進(jìn)行處理。在電子工程中,基本放大電路主要有三種形式,分別是共發(fā)射極放大電路(簡(jiǎn)稱共射放大電路)、共基極放大
    的頭像 發(fā)表于 10-15 11:07 ?3735次閱讀

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?613次閱讀

    mosfet的三種工作狀態(tài)及工作條件是什么

    的工作狀態(tài)及工作條件對(duì)于理解和設(shè)計(jì)相關(guān)電路至關(guān)重要。以下是MOSFET的三種主要工作狀態(tài)及其工作條件的介紹。 一、MOSFET的三種工作狀態(tài) MOSFET根據(jù)其柵源電壓(VGS)和漏源電壓(VDS
    的頭像 發(fā)表于 10-06 16:51 ?6138次閱讀

    單片機(jī)的三種總線結(jié)構(gòu)

    單片機(jī)的三種總線結(jié)構(gòu)包括地址總線(Address Bus, AB)、數(shù)據(jù)總線(Data Bus, DB)和控制總線(Control Bus, CB)。這三種總線在單片機(jī)內(nèi)部及與外部設(shè)備之間的數(shù)據(jù)傳輸
    的頭像 發(fā)表于 09-10 11:32 ?7145次閱讀

    使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-02 11:30 ?0次下載
    使用邊緣AI和Sitara處理器進(jìn)行<b class='flag-5'>關(guān)鍵字</b>檢測(cè)

    typedef struct和直接struct的區(qū)別

    使用方式和靈活性上存在一些區(qū)別。下面詳細(xì)解釋這兩方式的區(qū)別和用法。 直接使用 struct 當(dāng)你直接使用 struct 關(guān)鍵字定義一個(gè)結(jié)構(gòu)體時(shí),你創(chuàng)建了一個(gè)新的類型,但你需要通過(guò) struct
    的頭像 發(fā)表于 08-20 10:58 ?3614次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品