最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入uCOS中全局變量的使用詳解

 更新時(shí)間:2013年05月14日 16:52:53   作者:  
本篇文章是對(duì)uCOS中全局變量的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

在C語言編程中經(jīng)常會(huì)遇到全局變量。全局變量的定義一般采用下面的方式

.C文件中定義

unsigned int gVariable;

.h文件中聲明

extern unsigned int gVariable;

這樣做的目的是防止變量重復(fù)聲明,提高編譯效率。但是如果這樣的定于如果安排不好就會(huì)出現(xiàn)各種各樣的問題。在編譯時(shí)重復(fù)的聲明,甚至出現(xiàn)錯(cuò)誤。

閱讀邵貝貝翻譯的《uC/OS-II》一書,發(fā)現(xiàn)里面用了一種非常巧妙的全局變量定義的方法,下面就自己的理解做一下記錄,算是自己的筆記。也寫出來和大家共同學(xué)習(xí)。

uC/OS-II中定義了一全局使用的頭文件includes.h。這個(gè)文件在任意一個(gè).C 文件中引用。

在每一個(gè).H文件中定義了這樣一個(gè)宏。\

復(fù)制代碼 代碼如下:

#ifdef XXX_GLOBALS

#define XXX_EXT

#else

#define XXX_EXT extern

#endif


.H 文件中每個(gè)全局變量都加上了xxx_EXT的前綴。xxx代表模塊的名字。該模塊的.C文件中有以下定義:

#define XXX_GLOBALS

#include "includes.h"

當(dāng)編譯器處理.C文件時(shí),它強(qiáng)制xxx_EXT(在相應(yīng).H文件中可以找到)為空,(因?yàn)閤xx_GLOBALS已經(jīng)定義)。所以編譯器給每個(gè)全局變量分配內(nèi)存空間,而當(dāng)編譯器處理其他.C文件時(shí),xxx_GLOBAL沒有定義,xxx_EXT被定義為extern,這樣用戶就可以調(diào)用外部全局變量。為了說明這個(gè)概念,可以參見uC/OS_II.H,其中包括以下定義:

復(fù)制代碼 代碼如下:

#ifdef OS_GLOBALS

#define OS_EXT

#else

#define OS_EXT extern

#endif


OS_EXT INT32U OSIdleCtr;

OS_EXT INT32U OSIdleRun;

OS_EXT INT32U OSIdleMax;


同時(shí),uCOS_II.H有中以下定義:

#define OS_GLOBALS

#include "includes.h"

當(dāng)編譯器處理uCOS_II.C時(shí),它使得頭文件變成如下所示,因?yàn)镺S_EXT被設(shè)置為空。

INT32U OSIdleCtr;

INT32U OSIdleRun;

INT32U OSIdleMax;

這樣編譯器就會(huì)將這些全局變量分配在內(nèi)存中。當(dāng)編譯器處理其他.C文件時(shí),頭文件變成了如下的樣子,因?yàn)镺S_GLOBAL沒有定義,所以O(shè)S_EXT被定義為extern。

extern INT32U OSIdleCtr;

extern INT32U OSIdleRun;

extern INT32U OSIdleMax;

在這種情況下,不產(chǎn)生內(nèi)存分配,而任何 .C文件都可以使用這些變量。這樣的就只需在 .H 文件中定義一次就可以了。

相關(guān)文章

  • 詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載

    詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載

    這篇文章主要介紹了詳解C++中的內(nèi)聯(lián)函數(shù)和函數(shù)重載,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • OpenCV實(shí)現(xiàn)鼠標(biāo)框選并顯示框選區(qū)域

    OpenCV實(shí)現(xiàn)鼠標(biāo)框選并顯示框選區(qū)域

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)鼠標(biāo)框選并顯示框選區(qū)域,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 淺談c++中的stl中的map用法詳解

    淺談c++中的stl中的map用法詳解

    下面小編就為大家?guī)硪黄獪\談c++中的stl中的map用法詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • C++標(biāo)準(zhǔn)模板庫STL的介紹

    C++標(biāo)準(zhǔn)模板庫STL的介紹

    今天小編就為大家分享一篇關(guān)于C++標(biāo)準(zhǔn)模板庫STL的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路

    C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路

    這篇文章主要介紹了C++高并發(fā)內(nèi)存池的整體設(shè)計(jì)和實(shí)現(xiàn)思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)WebSocket服務(wù)器的案例分享

    C++實(shí)現(xiàn)WebSocket服務(wù)器的案例分享

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的通信協(xié)議,與HTTP協(xié)議不同,它允許服務(wù)器主動(dòng)向客戶端發(fā)送數(shù)據(jù),而不需要客戶端明確地請(qǐng)求,本文主要給大家介紹了C++實(shí)現(xiàn)WebSocket服務(wù)器的案例,需要的朋友可以參考下
    2024-05-05
  • C++高級(jí)數(shù)據(jù)結(jié)構(gòu)之優(yōu)先隊(duì)列

    C++高級(jí)數(shù)據(jù)結(jié)構(gòu)之優(yōu)先隊(duì)列

    這篇文章主要介紹了C++高級(jí)數(shù)據(jù)結(jié)構(gòu)之優(yōu)先隊(duì)列,文章圍繞主題的相關(guān)資料展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 指針與const限定符的使用分析

    指針與const限定符的使用分析

    本篇文章對(duì)指針與const限定符的使用進(jìn)行了分析介紹。需要的朋友參考下
    2013-05-05
  • C和指針小結(jié)(推薦)

    C和指針小結(jié)(推薦)

    下面小編就為大家?guī)硪黄狢和指針小結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考,一起跟隨小編過來看看吧
    2016-06-06
  • C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì)

    C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論

九江市| 确山县| 清水河县| 颍上县| 甘谷县| 巴林右旗| 苏州市| 视频| 宣城市| 通化县| 马尔康县| 宣汉县| 明水县| 健康| 通化市| 榆社县| 建水县| 右玉县| 平远县| 华亭县| 临江市| 河西区| 清涧县| 杭锦后旗| 南召县| 雷山县| 南皮县| 宁武县| 黄浦区| 襄垣县| 镇安县| 禹州市| 邹城市| 荥经县| 军事| 台中县| 昌吉市| 泸溪县| 鄂州市| 泰州市| 应城市|