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

总结

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

相关文章

  • 深入理解C++ 空类大小

    深入理解C++ 空类大小

    本文主要介绍了C++ 空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下
    2025-01-01
  • C++ 二叉树的实现超详细解析

    C++ 二叉树的实现超详细解析

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C++中二叉树的实现和遍历,需要的可以参考一下
    2022-03-03
  • C++11/14如何使用typedef和using定义类型别名和别名模版

    C++11/14如何使用typedef和using定义类型别名和别名模版

    这篇文章主要介绍了C++11/14如何使用typedef和using定义类型别名和别名模版
    2023-04-04
  • Linux网络编程之UDP Socket程序示例

    Linux网络编程之UDP Socket程序示例

    这篇文章主要介绍了Linux网络编程之UDP Socket程序示例,有助于读者在实践中掌握UDP协议的原理及应用方法,需要的朋友可以参考下
    2014-08-08
  • C++键盘记录程序代码

    C++键盘记录程序代码

    这篇文章主要介绍了C++键盘记录程序代码,是Windows应用程序开发中非常实用的功能,该功能也常被一些远程操控程序所实用,需要的朋友可以参考下
    2014-10-10
  • c++中string类型和int类型相互转换的几种常用方法

    c++中string类型和int类型相互转换的几种常用方法

    我们在编写程序时,经常涉及到int与string之间的类型转换,本文主要介绍了c++中string类型和int类型相互转换的几种常用方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 一文详细讲解C++精妙的哈希算法

    一文详细讲解C++精妙的哈希算法

    这篇文章主要介绍了C++精妙的哈希算法的相关资料,哈希结构通过哈希函数将关键码映射到表中的特定位置,以提高搜索效率,理想的哈希函数应保证一致性、哈希值均匀分布、高计算效率与最小化冲突,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • C++编程中将引用类型作为函数参数的方法指南

    C++编程中将引用类型作为函数参数的方法指南

    这篇文章主要介绍了C++编程中将引用类型作为函数参数的方法指南,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言正则表达式操作示例

    C语言正则表达式操作示例

    这篇文章主要介绍了C语言正则表达式操作,结合实例形式分析了C语言正则匹配类似邮箱格式功能的实现技巧,需要的朋友可以参考下
    2017-07-07
  • 如何正确的使用语句块

    如何正确的使用语句块

    本篇文章是对正确使用语句块进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论