目录
- C语言结构体封装全局变量
- C语言全局变量定义与声明技巧
- 总结
C语言结构体封装全局变量
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中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针
//这个gd在程序中经常被访问,因此放在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; //强制类型转换,分配基地址
C语言全局变量定义与声明技巧
在实际的编程中,全局变量对我们编程来说既是喜又是泪,虽然说项目中尽量避免使用全局变量,但总有些时候不得不使用它,并且可能使用得不少,各个模块可能有含有或多或少的几个全局变量,而当别的模块需要引用的时候,就必须externEQOQNuKRdu它,造成你定义了一遍又声明了一遍,这样就稍显得麻烦。
下面介绍一种全局变量的管理方法,至始至终只定义一次,javascript所有的全局变量以某种声明方式放入一个名叫global.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
总结
以上为个人经验,希望能给编程大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论