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

总结

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

相关文章

  • Linux下用Valgrind做检查(防止内存泄露)

    Linux下用Valgrind做检查(防止内存泄露)

    Valgrind是一款基于模拟linux下的程序调试器和剖析器的软件套件,可以运行于x86, amd64和ppc32架构上。valgrind包含一个核心,它提供一个虚拟的CPU运行程序,还有一系列的工具,它们完成调试,剖析和一些类似的任务
    2014-01-01
  • C++中单链表的建立与基本操作

    C++中单链表的建立与基本操作

    以下是对C++中单链表的建立与基本操作进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • 你真的知道C++对象大小吗?

    你真的知道C++对象大小吗?

    这篇文章主要给大家介绍了关于C++对象大小的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • json格式解析和libjson的用法介绍(关于cjson的使用方法)

    json格式解析和libjson的用法介绍(关于cjson的使用方法)

    下面小编就为大家带来一篇json格式解析和libjson的用法介绍(关于cjson的使用方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C++缺省参数、函数重载与引用深入解析

    C++缺省参数、函数重载与引用深入解析

    缺省参数函数重载以及引用的出现是为了补充C语言语法的不足以及对C语言设计不合理的地方进行优化,引用的出现大大降低了我们学习C语言时相对于指针的难度,也便于我们更好的理解和使用,感兴趣的朋友一起看看吧
    2024-04-04
  • C++浅析内联函数的使用

    C++浅析内联函数的使用

    为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数
    2022-05-05
  • C语言实现俄罗斯方块课程设计

    C语言实现俄罗斯方块课程设计

    这篇文章主要为大家详细介绍了C语言实现俄罗斯方块课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++中动态内存管理的实现

    C++中动态内存管理的实现

    本文主要介绍了C++中动态内存管理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • C++小练习之高性能实现字符串分割

    C++小练习之高性能实现字符串分割

    字符串分割是日常工作中比较常见的基础函数,通常大家会使用现成的基础库,基础库的性能是否是最佳的,本文主要和大家探讨一下如何最大限度的提升字符串分割的性能,希望对大家有所帮助
    2023-10-10
  • C++中的数据对齐示例详解

    C++中的数据对齐示例详解

    这篇文章主要介绍了C++中数据对齐的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论