C語言中結(jié)構(gòu)體封裝全局變量用法說明
C語言結(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") //定義了一個要放在寄存器r8中的全局變量,名字叫g(shù)d,類型是一個指向gd_t類型變量的指針 //這個gd在程序中經(jīng)常被訪問,因此放在register當中提升效率 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; //強制類型轉(zhuǎn)換,分配基地址
C語言全局變量定義與聲明技巧
在實際的編程中,全局變量對我們編程來說既是喜又是淚,雖然說項目中盡量避免使用全局變量,但總有些時候不得不使用它,并且可能使用得不少,各個模塊可能有含有或多或少的幾個全局變量,而當別的模塊需要引用的時候,就必須extern它,造成你定義了一遍又聲明了一遍,這樣就稍顯得麻煩。
下面介紹一種全局變量的管理方法,至始至終只定義一次,所有的全局變量以某種聲明方式放入一個名叫g(shù)lobal.h的頭文件中,然后別的模塊include它就OK。
那么如何操作呢?
這里還要新建一個同名的global.c源文件,用來定義所有全局變量,注意這里并不是手工一個一個定義,而是采用預處理方式,廢話少說見下面程序
- 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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C++11/14如何使用typedef和using定義類型別名和別名模版
這篇文章主要介紹了C++11/14如何使用typedef和using定義類型別名和別名模版2023-04-04Linux網(wǎng)絡編程之UDP Socket程序示例
這篇文章主要介紹了Linux網(wǎng)絡編程之UDP Socket程序示例,有助于讀者在實踐中掌握UDP協(xié)議的原理及應用方法,需要的朋友可以參考下2014-08-08c++中string類型和int類型相互轉(zhuǎn)換的幾種常用方法
我們在編寫程序時,經(jīng)常涉及到int與string之間的類型轉(zhuǎn)換,本文主要介紹了c++中string類型和int類型相互轉(zhuǎn)換的幾種常用方法,具有一定的參考價值,感興趣的可以了解一下2023-08-08C++編程中將引用類型作為函數(shù)參數(shù)的方法指南
這篇文章主要介紹了C++編程中將引用類型作為函數(shù)參數(shù)的方法指南,是C++入門學習中的基礎知識,需要的朋友可以參考下2015-09-09