C語(yǔ)言中結(jié)構(gòu)體封裝全局變量用法說(shuō)明
C語(yǔ)言結(jié)構(gòu)體封裝全局變量
typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
unsigned long have_console;
unsigned long reloc_off;
unsigned long env_addr;
unsigned long env_valid;
unsigned long fb_base;
#ifdef CONFIG_VFD
unsigned char vfd_type;
#endif
#if 0
unsigned long cpu_clk;
unsigned long bus_clk;
phys_size_t ram_size;
unsigned long reset_status;
#endif
void **jt;
} gd_t;
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
//定義了一個(gè)要放在寄存器r8中的全局變量,名字叫g(shù)d,類(lèi)型是一個(gè)指向gd_t類(lèi)型變量的指針
//這個(gè)gd在程序中經(jīng)常被訪問(wèn),因此放在register當(dāng)中提升效率
ulong gd_base;
gd_base = CFG_UBOOT_BASE + CFG_UBOOT_SIZE - CFG_MALLOC_LEN - CFG_STACK_SIZE - sizeof(gd_t)
gd = (gd_t*)gd_base; //強(qiáng)制類(lèi)型轉(zhuǎn)換,分配基地址
C語(yǔ)言全局變量定義與聲明技巧
在實(shí)際的編程中,全局變量對(duì)我們編程來(lái)說(shuō)既是喜又是淚,雖然說(shuō)項(xiàng)目中盡量避免使用全局變量,但總有些時(shí)候不得不使用它,并且可能使用得不少,各個(gè)模塊可能有含有或多或少的幾個(gè)全局變量,而當(dāng)別的模塊需要引用的時(shí)候,就必須extern它,造成你定義了一遍又聲明了一遍,這樣就稍顯得麻煩。
下面介紹一種全局變量的管理方法,至始至終只定義一次,所有的全局變量以某種聲明方式放入一個(gè)名叫g(shù)lobal.h的頭文件中,然后別的模塊include它就OK。
那么如何操作呢?
這里還要新建一個(gè)同名的global.c源文件,用來(lái)定義所有全局變量,注意這里并不是手工一個(gè)一個(gè)定義,而是采用預(yù)處理方式,廢話少說(shuō)見(jiàn)下面程序
- global.h
#ifdef GLOBAL_VAR #define GLOBAL_EXTERN #else #define GLOBAL_EXTERN extern #endif GLOBAL_EXTERN int g_var1; GLOBAL_EXTERN int g_var2;
- global.c
#define GLOBAL_VAR #include "global.h" #undef GLOBAL_VAR
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++?二叉樹(shù)的實(shí)現(xiàn)超詳細(xì)解析
二叉樹(shù)可以簡(jiǎn)單理解為對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō),最多擁有一個(gè)上級(jí)節(jié)點(diǎn),同時(shí)最多具備左右兩個(gè)下級(jí)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹一下C++中二叉樹(shù)的實(shí)現(xiàn)和遍歷,需要的可以參考一下2022-03-03
C++11/14如何使用typedef和using定義類(lèi)型別名和別名模版
這篇文章主要介紹了C++11/14如何使用typedef和using定義類(lèi)型別名和別名模版2023-04-04
Linux網(wǎng)絡(luò)編程之UDP Socket程序示例
這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之UDP Socket程序示例,有助于讀者在實(shí)踐中掌握UDP協(xié)議的原理及應(yīng)用方法,需要的朋友可以參考下2014-08-08
c++中string類(lèi)型和int類(lèi)型相互轉(zhuǎn)換的幾種常用方法
我們?cè)诰帉?xiě)程序時(shí),經(jīng)常涉及到int與string之間的類(lèi)型轉(zhuǎn)換,本文主要介紹了c++中string類(lèi)型和int類(lèi)型相互轉(zhuǎn)換的幾種常用方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
C++編程中將引用類(lèi)型作為函數(shù)參數(shù)的方法指南
這篇文章主要介紹了C++編程中將引用類(lèi)型作為函數(shù)參數(shù)的方法指南,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09

