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语言全局变量定义与声明技巧
在实际的编程中,全局变量对我们编程来说既是喜又是泪,虽然说项目中尽量避免使用全局变量,但总有些时候不得不使用它,并且可能使用得不少,各个模块可能有含有或多或少的几个全局变量,而当别的模块需要引用的时候,就必须extern它,造成你定义了一遍又声明了一遍,这样就稍显得麻烦。
下面介绍一种全局变量的管理方法,至始至终只定义一次,所有的全局变量以某种声明方式放入一个名叫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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。