C语言中结构体封装全局变量用法说明

 更新时间:2024年08月21日 08:48:14   作者:依然耀眼  
这篇文章主要介绍了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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • VC程序设计小技巧20例

    VC程序设计小技巧20例

    这篇文章主要介绍了VC程序设计小技巧20例,需要的朋友可以参考下
    2014-07-07
  • C语言自制测色弱找方块游戏的示例代码

    C语言自制测色弱找方块游戏的示例代码

    这篇文章主要介绍了基于C语言自制测色弱找方块的游戏。该游戏是仿照最近网上流行的找方块游戏编写的,可玩性还是挺高的,感兴趣的可以了解一下
    2022-12-12
  • 自己简单封装的一个CDialog类实例

    自己简单封装的一个CDialog类实例

    这篇文章主要介绍了自己简单封装的一个CDialog类,实例分析了自定义封装CDialog类的相关技巧,比较简单易懂,需要的朋友可以参考下
    2015-04-04
  • C++编写简单的打靶游戏

    C++编写简单的打靶游戏

    这篇文章主要介绍了使用C++编写简单的打靶游戏,本人也是个菜鸟,水平有限,有错误遗漏的地方在所难免,大家看看就好。
    2015-03-03
  • 在C语言里单引号和双引号的区别

    在C语言里单引号和双引号的区别

    这篇文章主要介绍了在C语言里单引号和双引号的区别,本文通过代码的实例和注释的详细的说明了单引号和双引号的概念与区别,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 使用c语言输出杨辉三角形的简单方法

    使用c语言输出杨辉三角形的简单方法

    这篇文章主要给大家介绍了关于如何使用c语言输出杨辉三角形的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 在Centos7中使用vscode和gdb调试PG插件的方法

    在Centos7中使用vscode和gdb调试PG插件的方法

    这篇文章主要介绍了在Centos7中使用vscode和gdb调试PG插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • C++实现正整数的四则运算表达式

    C++实现正整数的四则运算表达式

    这篇文章主要为大家详细介绍了C++实现正整数的四则运算表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Opencv提取连通区域轮廓的方法

    Opencv提取连通区域轮廓的方法

    这篇文章主要为大家详细介绍了Opencv提取连通区域轮廓的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C++代码实现五子棋小游戏

    C++代码实现五子棋小游戏

    这篇文章主要为大家详细介绍了C++代码实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论