tft每日頭條

 > 科技

 > static用法c語言

static用法c語言

科技 更新时间:2024-12-01 20:42:46

在C程序開發過程中,很多人都忽視了靜态變量和靜态函數重大作用。筆者就遇到一位資深程序員,看到我寫的代碼裡有static标識,很好奇,我告訴他後,他立馬用到他程序裡面了~~。

static用法c語言(最全面詳實的Static應用)1

靜态類型

根據static修飾的對象,可分為兩大類:在函數前面的和在變量前面的。

1. 放在函數前面

在實際項目中,我們經常會定義這樣一些小函數,它們隻被定義他們的那個文件裡的其它函數調用,而不會被其它文件裡的函數調用,即局部函數。建議要這樣的函數前要加static,表明此函數的作用範圍是本文件,也隻能在本文件中使用,當然頭文件中也是不能出現這個函數申明的,否則會報錯。

來看一個例子,同一個項目包含file1.c和file2.c

//file1.c中

int add(int x, int y) { return (x y); } void int funFile1(void) { return add(1, 2); }

//file2.c中

float add(float x, float y) { return (x y); } void float funFile2(void) { return add(1.1, 2.1); }

很明顯,編輯時會報add函數重複定義的錯誤。現在我們在add前面加上static試試。

//file1.c中

static int add(int x, int y) { return (x y); }

//調用本文件中static函數

void int funFile1(void) { return add(1,2); }

//file2.c中

static float add(float x, float y) { return (x y); }

//調用本文件中static函數

void float funFile2(void) { return add(1, 2); }

編輯通過,完全正确。說明在同一個項目中,不同文件中含有相同名字的static函數是允許的。這個功能在多人合作的大項目中,特别有用,隻要大家定義好接口函數,可以極大的避免同文件名的錯誤。

2.放在變量前面

分在函數内和在函數外兩種情況,關于static變量在内存中的位置,詳見關于内存堆棧

2.1 函數内的static變量

函數内的static變量隻能被本函數調用,其特點是隻能被初始化一次,而且,退出函數後其值會保持,限于函數内的“全局”變量.

//每調用一次,val值增1 void int getCount(void) { //編輯時完成初始化值為1 static int val=1; val ; return val; }

2.2 函數外的static變量

定義在函數外的static變量隻能被本文件中的函數使用,不能被其它文件使用。來看例子,同一個項目包含file1.c和file2.c

//file1.c

//編輯時完成初始化值為1 //與file2中的val沒關系 static int val=1; void int incCount(void) { val ; return val; } //靜态函數 (限file1.c) static void int decCount(void) { val--; return val; }

//file2.c

//編輯時完成初始化值為10 //與file1中的val沒關系 static int val=10; void int inc(void) { val ; return val; } //靜态函數 (限file2.c) static void int decCount(void) { val--; return val; }

編譯通過,完全正确。同一項目中的不同文件含有同名靜态變量允許存在,其作用域與靜态函數一緻。

碼字不易,謝謝關注,你的點贊是我最大的動力。共享知識,共同成長!

static用法c語言(最全面詳實的Static應用)2

static用法c語言(最全面詳實的Static應用)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved