0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

基于static變量來實現(xiàn)一個模塊的封裝

5RJg_mcuworld ? 2018-01-05 10:54 ? 次閱讀

剛學(xué)習(xí)完C后,做的關(guān)于C的課程設(shè)計是在一個源文件中放了幾百行代碼,而且各個功能之間都是相互依賴的,這樣就會很麻煩。因為當(dāng)我要修改某個地方的時候,就會牽連著要修改喝多的地方。而在實際的程序設(shè)計中,這也是不可取的。因此,模塊化和封裝的思想就顯得很重要了?。?!

static變量

static變量的一個顯著的作用就是可以實現(xiàn)一個模塊的封裝。

static存儲類別的特性決定了static聲明的全局變量只能被本源文件的函數(shù)引用。當(dāng)在一個源文件中定義一個static全局變量后,其他文件就不能通過使用“extern”關(guān)鍵詞來引用該全局變量,而只能通過該源文件提供的接口函數(shù)來訪問這個全局變量。

實例

我寫了一個簡單的實現(xiàn)楊輝三角的程序。其中,定義了一個靜態(tài)全局變量數(shù)組a[100][100],然后后面的函數(shù)就是對該數(shù)組的一些操作。而該源文件之外的函數(shù)就只能夠通過調(diào)用這些函數(shù)來完成對數(shù)組的操作。

Pascal_triangle.c

[cpp] view plain copy

1. #include

2.

3. static int a[100][100];

4.

5. void Pascal_triangle(int num)

6. {

7. int i,j;

8.

9. for(i = 1; i <= num; i ++) ?

10. {

11. a[i][0] = 1;

12. a[i][i-1] = 1;

13. }

14.

15. for(i = 2;i < num; i ++) ?

16. {

17. for(j = 0; j < i -1; j ++) ?

18. {

19. a[i + 1][j + 1] = a[i][j] + a[i][j + 1];

20. }

21. }

22.

23. for(i = 1; i <= num;i ++) ?

24. {

25. for(j = 0; j < num; j ++) ?

26. {

27. printf("%d ",a[i][j]);

28. if(i == (j + 1))

29. {

30. printf("\n");

31. break;

32. }

33. }

34. }

35. }

Pascal_triangle.h

[cpp] view plain copy

1. #ifndef PASCAL_TRIANGLE_H_INCLUDED

2. #define PASCAL_TRIANGLE_H_INCLUDED

3.

4. extern void Pascal_triangle(int num);

5.

6. #endif // PASCAL_TRIANGLE_H_INCLUDED

main.c

[cpp] view plain copy

1. #include

2. #include "Pascal_triangle.h"

3.

4. int main(void)

5. {

6. int num;

7. printf("請輸入數(shù)據(jù):\n");

8. scanf("%d",&num);

9. Pascal_triangle(num);

10. return 0;

11. }

這樣做就實現(xiàn)了楊輝三角的實現(xiàn)程序?qū)ν饨绲姆庾?,一個工程中的其他源文件里的函數(shù)不用了解楊輝三角函數(shù)里面的具體操作是如何進(jìn)行的,只需要使用模塊中提供的接口函數(shù)就可以了。這樣楊輝三角的實現(xiàn)模塊就完全的獨(dú)立于其他的模塊了。如圖所示:

基于static變量來實現(xiàn)一個模塊的封裝

Pascal_triangle.h頭文件就是向外界提供一個實現(xiàn)楊輝三角的接口函數(shù)的聲明,這一點(diǎn)是很重要的。

當(dāng)這樣處理好一個源文件之后,不管怎樣操作修改楊輝三角的實現(xiàn)函數(shù),對其他的代碼沒有任何影響。但是有一點(diǎn)要注意:不要修改函數(shù)接口本身,因為一旦修改,其他代碼就可能會有大的改動

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

    關(guān)注

    126

    文章

    7901

    瀏覽量

    142951
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136808
  • static
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    10370

原文標(biāo)題:C語言學(xué)習(xí)|封裝和模塊化思想

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    強(qiáng)大的matlab:在類中實現(xiàn)static成員變量 (轉(zhuǎn)帖)

    不需要使用MATLAB的類定義了??墒侨绻麘?yīng)用MATLAB開發(fā)具有工程應(yīng)用型的程序,使用面向?qū)ο缶幊虝哂胁豢杀葦M的優(yōu)勢。懂C++的朋友應(yīng)該都知道,C++有static成員,static
    發(fā)表于 03-07 10:42

    static 修飾的變量在函數(shù)中賦值問題

    ,即將退出函數(shù)(在下面1處)step 的值莫名其妙的變回2,step變量只有這個地方使用,這個是什么問題???大神們幫忙分析下什么問題?。。。?!如下程序:void display(){static
    發(fā)表于 12-15 09:10

    static的全局變量與局部變量的使用,看完你就懂了

    時,編譯器為它在棧上分配空間,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉,這樣就產(chǎn)生了問題: 如果想將函數(shù)中此變量的值保存至下次調(diào)用時,如何
    發(fā)表于 06-27 08:54

    static作用(修飾函數(shù)、局部變量、全局變量

    詳細(xì)介紹了static作用(修飾函數(shù)、局部變量、全局變量)的用法
    發(fā)表于 11-17 10:30 ?4次下載

    C語言static作用

      在C語言中,static的字面意思很容易把我們導(dǎo)入歧途,其實它的作用有三條。當(dāng)我們同時編譯多個文件時,所有未加static前綴的全局變量和函數(shù)都具有全局可見性。
    發(fā)表于 09-18 10:26 ?8次下載

    c語言static的作用

    全局變量只能在本文件中訪問,不能在其它文件中訪問,即便是extern外部聲明也不可以。第三、static修飾函數(shù),則這個函數(shù)的只能在本文件中調(diào)用,不能被其他文件調(diào)用。
    發(fā)表于 11-03 09:36 ?1.5w次閱讀

    C語言register變量和extern及static等知識總結(jié)

    register變量必須是單個的值,并且其長度應(yīng)小于或等于整型的長度。但是,有些機(jī)器的寄存器也能存放浮點(diǎn)數(shù)。 register變量可能不存放在內(nèi)存中,所以不能用取址符運(yùn)算符 。 只
    發(fā)表于 11-21 10:20 ?5次下載

    C語言關(guān)鍵字static有哪些絕妙用途

    為什么要說static妙,它確實是妙,在軟件開發(fā)或者單片機(jī)開發(fā)過程中,大家總以為static就是靜態(tài)變量,在
    發(fā)表于 07-18 17:38 ?1次下載
    C語言關(guān)鍵字<b class='flag-5'>static</b>有哪些絕妙用途

    分析如何遠(yuǎn)離漫天飛舞的全局變量

    來源:嵌入式大雜燴 前篇 《由static談?wù)?b class='flag-5'>模塊封裝》 基本實現(xiàn)了對外隱藏屬性,隱藏局部模塊
    的頭像 發(fā)表于 09-15 13:49 ?1646次閱讀

    static談?wù)?b class='flag-5'>模塊封裝

    static的用法對于很多剛剛開始接觸開發(fā)的朋友來說,可能沒理解其真正的用途,雖說這個是老生常談的話題,但這也是高頻面試要點(diǎn),所以本...
    發(fā)表于 01-26 18:00 ?0次下載
    由<b class='flag-5'>static</b><b class='flag-5'>來</b>談?wù)?b class='flag-5'>模塊</b><b class='flag-5'>封裝</b>

    為什么C++單例模式不能直接全部使用static變量static函數(shù)呢?

    通過getInstance()函數(shù)獲取單例對象,這種模式的關(guān)鍵之處不是在于強(qiáng)迫你用函數(shù)來獲取對象。關(guān)鍵之處是讓static對象定義在函數(shù)內(nèi)部,變成局部static變量??聪逻@種實現(xiàn)方式
    的頭像 發(fā)表于 06-05 14:14 ?1571次閱讀

    Static變量和Local變量的區(qū)別

    變量可以分為3類,即Static、Automatic、和Local。如下表所示。
    的頭像 發(fā)表于 10-12 09:35 ?1398次閱讀

    C語言的static究竟限制了誰?介紹種繞開static限制的方法

    大佬們,問比較低智問題,static修飾的變量不是只能被當(dāng)前文件所調(diào)用嗎?為什么這里在其他.c文件可以調(diào)用get_board_led_opr這個函數(shù)獲取board_demo_led
    的頭像 發(fā)表于 07-28 15:10 ?1185次閱讀
    C語言的<b class='flag-5'>static</b>究竟限制了誰?介紹<b class='flag-5'>一</b>種繞開<b class='flag-5'>static</b>限制的方法

    Java中對static關(guān)鍵詞的介紹

    static 是Java的關(guān)鍵字,可以用來修飾成員變量、修飾成員方法、構(gòu)造靜態(tài)代碼塊、實現(xiàn)靜態(tài)導(dǎo)包以及
    的頭像 發(fā)表于 10-11 15:26 ?485次閱讀
    Java中對<b class='flag-5'>static</b>關(guān)鍵詞的介紹

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

    (StaticVariables):在C語言中,使用`static`關(guān)鍵字聲明靜態(tài)變量種常見的用法,它具有以下主要作用:1.生存期延長:靜態(tài)
    的頭像 發(fā)表于 11-10 08:00 ?520次閱讀
    <b class='flag-5'>static</b>關(guān)鍵字的三種用法