目前我在main()
上方定义了子程序和全局变量。我试图在C中创建一个库。我可以在头文件中声明全局变量吗?
答案 0 :(得分:9)
我可以在头文件中声明全局变量吗?
是的,您可以在头文件中声明全局变量。但是,这些必须是声明,而不是全局变量的定义。
换句话说,标题应该说
// This goes into the header
extern int my_global_int;
并且C文件应该说
int my_global_int;
注意:您可以这样做的事实并不意味着您应该这样做。从库中公开“原始”全局变量是一种不好的做法,因为您的库的用户可以对他们做出意想不到的事情。
更好的方法是通过使它们static
隐藏你的全局变量,然后公开函数来操纵它们:
// This goes into the header
int get_global();
void set_global(int n);
// This goes into the C file
static int my_former_global;
int get_global() {
return my_former_global;
}
void set_global(int n) {
if (<n-is-valid>) {
my_former_global = n;
}
}
答案 1 :(得分:1)
尽量减少全局变量的使用,因为它们会降低程序的可读性并且更容易出错。应该通过其接口使用库(在它提供的函数之间来回传递数据),而不是通过访问全局变量。
在没有其他办法的情况下,例如与中断服务程序共享数据,尝试通过使变量保持静态来保持包含在该编译单元中的变量,这样它们就不会干扰其他库。
如果由于某种原因你确实需要一个全局变量,请在代码文件(c文件)中定义它并在头文件中将其声明为extern。
答案 2 :(得分:0)
答案是肯定的,不是。是的,您可以在头文件中声明全局变量,但是不应该声明全局变量,尤其是当您要部署库时。或者至少选择那些非常谨慎地转向全局空间的变量,然后尝试重新思考它们是否真的有用,或者如果在某些上下文结构中保存变量会更好。
答案 3 :(得分:0)
应该没有问题,或者您可以在.c中声明它们并在.h文件中使用extern
答案 4 :(得分:0)
是的,你可以,但这是一个坏习惯;不要这样做。