如何防止多處使用extern關鍵字造成程式混亂

來源:互聯網
上載者:User

       這幾天我在研讀uc/os II 源碼時發現它提供的程式設計方法能非常有效地解決上述標題的難題。它主要是通過#ifdef 預先處理指令來實現的。

        先說說extern能造成什麼混亂吧!

       假如現在有5個檔案,分別為:main.c , hello.c , flow.c,  etc.c , include.h.

       如果在main.c中定義一些全域變數,如下:

       char   obu_channel

       char   obu_info

       char   obu_mac

       但是,我們需要在hello.c flow.c etc.c中用到這幾個變數,通常我們會在這三個檔案中添加extern關鍵字,然後就可以正常使用了。但是這樣並不能使程式變的簡潔,如果是小程式,這樣寫無所謂,但是如果是大工程,大項目的時候,我們就應該考慮到這樣一個問題:假使每個*.c檔案都調用其它檔案的全域變數,再假使這種類型的全域變數非常多,你如何對它們進行有效管理而使它變的簡潔呢?或者在某一時刻,你想查看此變數的具體定義位置,你可能無從下手了,你看,混亂吧!好的,下面我們就來解決它。

 

      我們可以將這幾個變數定義在include.h檔案中,定義的內容如下:

      #ifdef GLOBAL

      #define _EXT_

      #else

      #define _EXT_    extern

      #endif

 

      _EXT_   char obu_channel

      _EXT_   char obu_info

      _EXT_   char obu_mac

 

 

       然後我們在main.c中包含 include.h標頭檔,並在main.c中加入:#define GLOBAL,  編譯器在編譯時間就對它進行記憶體的分配,這相當於是在main.c中定義了3個全域變數。就如同在main.c中定義了:

       char   obu_channel

       char   obu_info

       char   obu_mac

 

 

 

       而如果hello.c和flow.c以及etc.c這三個檔案需要使用這三個變數的時候,(如果我們未定義#define GLOBAL)_EXT_就會被替換成extern, 系統自動的添加為extern,以表時這些變數是來自其它檔案定義的,此時情況如下:

       extern

char   obu_channel

       extern

char   obu_info

       extern

char   obu_mac

 

 

這樣就可以很方便的對全域變數進行統一的管理了,並且可以使程式變得更加簡潔。這個方法好吧!~~  這也算是個小技巧吧,看來ucos II還是有的看頭,可以借鑒裡面的編程方法,提高自己的技能。多研讀大師的傑作總有好處,加油!~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.