C-全局变量 可不可以定义在被多个c文件包含的头文件中
网上都说加是static 但加了就不是多个文件共享的全局变量了,是各自文件独立的局部变量了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
网上都说加是static 但加了就不是多个文件共享的全局变量了,是各自文件独立的局部变量了。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
可以。在头文件里面包含这个变量的extern声明,然后在某一个.c源文件对这个变量进行定义一次。这样的话,包含这个头文件的每个编译单元看到的都是同一个变量。
在头文件中 定义extern 你的变量 就可以了
全局变量不可以在多个文件中定义:既不能在多个头文件中定义,也不可以在多个实现文件中定义。否则,连接时会抱怨多重定义的错误。
只能在一个实现文件中定义一次,但可以在多个头文件中声明(使用extern)。强烈建议只在一个文件中声明一次,使用时include此头文件,以保证一致性。
加上static后,确实如你查到的,“就不是多个文件共享的全局变量了,是各自文件独立的局部变量了。”
可以。
比如windows环境下,使用VC关键字在一个头文件中定义一个全局变量:
__declspec(selectany) int g_i = 0;
这样,在包含此头文件的所有源文件中,都能见到g_i这个变量,并且DLL或EXE中,g_i只有一份。
主要是关键字selectany起作用。
供参考。
的确加了static是各自文件的独立局部变量,但这些变量都是一致的,你用全局变量不就是想公用这个变量让各文件保持一致嘛,用这种方法更好
当然你也可以在一个文件中定义,另外文件用extern声明而公用变量,只是在头文件中加static包含更清晰
通过extern可以使用其他文件中定义的变量,举个例子:
在extern1.c文件中
int a[] = {10,20,30,40,50};
void f()
{
a[1] += 100;
}
在extern1.h文件中用extern声明a[]
void f();
extern int a[];
最后再main.c文件调用f(),并查看a[1]的变化
#include "extern1.h"
#include <stdio.h>
int main()
{
f();
printf("a[1]=%dn", a[1]);
}