【发布时间】:2018-10-26 11:58:02
【问题描述】:
几年前,我了解到全局变量不好,应该避免使用。但我知道它们有时是不可避免的,至少在嵌入式系统中是这样。您认为与他们合作最优雅的方式是什么?
在我的项目中,我有一个名为 globals.h 的文件,我在其中定义了所有全局变量:
#ifndef GLOBALS_H
#define GLOBALS_H
extern int16_t gVariable1;
extern int16_t gVariable2;
….
#endif
在我的主项目文件中,我声明了所有全局变量:
/*
***********************************************************************
* global variables *
***********************************************************************
*/
int16_t gVariable1 = 0;
int16_t gVariable2 = 0;
int16_t main (void)
{
gVariable1 = 6;
// do other stuff
}
并且知道我在需要访问全局变量的项目的每个其他文件中都包含globals.h。
这很好,但是有没有更优雅的方法来处理它?
【问题讨论】:
-
这是正确的,除非您决定将全局变量分开,以便一组在
header1.h中声明并在source1.c中定义,而第二组在header2.h中声明并在source2.c(或分成两组以上的文件)。您可能会在How do I useexternto share variables between source files? 中找到一些想法,但坦率地说,您已经有了核心想法——在头文件中声明变量,并在特定的源文件中定义它们,并在需要访问任何变量的任何地方使用头文件。跨度> -
请注意,优雅不应成为最终目标。典型的目标是使程序执行某些功能或提高性能。优雅是一种工具。优雅通常与良好的设计相一致,它还有助于人们更容易理解、记住和使用软件(并享受工作)。因此,当它服务于有用的目的时,寻求对全局变量的优雅管理是很好的。但优雅只是一种工具;当一些相互冲突的需求出现时,我们不应该坚持。
标签: c coding-style global-variables