uC OS II中的全域性變數宣告

2021-05-08 09:31:00 字數 1031 閱讀 5709

在uc/os-ii的**中,應用了一種讓人耳目一新的全域性變數定義方法。

在《uc/os-ii》中,作者給出了解釋,但是這裡還是忍不住要討論一番。

我們知道,全域性變數的使用有兩個問題:

1.要給它分配記憶體,並且只能分配一次。

2.在其它模組中也要能通過extern關鍵字呼叫。

軟體開發網

按照平時的定義,如果安排得不好,總是會出問題,extern起來沒完。

而在uc/os-ii採用了一種比較聰明的做法。

uc/os-ii中,每個.c檔案都通過includes.h包含了所有的.h檔案

那麼, uc/os-ii採用了下面的辦法: 軟體開發網

每當定義全域性變數時,首先做下面的定義: http://www.mscto.com

#ifdef ***_globals

#define ***_ext

#else

#define ***_ext extern

#endif

.h 檔案中每個全域性變數都加上了***_ext的字首。***代表模組的名字。而在該模組

的.c檔案中有以下定義:

軟體開發網

#define ***_globals

#include "includes.h"

比如,定義了 ***_ext int32u g_***;

這樣,編譯到***模組時,***_globals被定義,根據上面的預編譯條件,這時候

***_ext是空,從而

***_ext int32u g_***;

等價於 int32u g_***;

這時候,變數被分配記憶體。

當編譯其它模組時,***_globals沒有被定義,根據上面的預編譯條件,這時候

***_ext是extern,從而

***_ext int32u g_***;

等價於 extern int32u g_***;

這時候,只是變數的外部引用。

通過這種辦法,使得全域性變數只需在標頭檔案中定義一次就可以了,避免了不少麻煩。

全域性變數宣告

首先在.h標頭檔案中宣告全域性變數,用extern宣告,宣告時不能賦值。pragma once ifndef beijing h define beijing h include include include opencv2 core core.hpp extern std vectorug ex...

全域性變數的定義宣告

c 中定義全域性變數要注意的地方 yandaren 1220 chinaunix部落格 c 中定義全域性變數要注意的地方 在c 中定義全域性變數是應該盡量在.cpp檔案中定義,而不要在.h 檔案中 定義,定義好了之後,可以在.件中利用 extern關鍵字進行 宣告.如果在.件中定義的話,多層包含可能...

uC OS II學習筆記 定義全域性變數

全域性變數應該是得到記憶體分配且可以被其他模組通過c語言中extern關鍵字呼叫的變數。因此,必須在 c 和 h 檔案中定義。這種重複的定義很容易導致錯誤。以下討論的方法只需用在標頭檔案中定義一次。雖然有點不易懂,但使用者一旦掌握,使用起來卻很靈活。表1.2中的 定義出現在定義所有全域性變數的.h標...