C-全局变量 可不可以定义在被多个c文件包含的头文件中

发布于 2016-10-15 10:55:32 字数 55 浏览 1548 评论 6

网上都说加是static 但加了就不是多个文件共享的全局变量了,是各自文件独立的局部变量了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浮生未歇 2017-10-02 12:38:54

可以。在头文件里面包含这个变量的extern声明,然后在某一个.c源文件对这个变量进行定义一次。这样的话,包含这个头文件的每个编译单元看到的都是同一个变量。

虐人心 2017-09-01 05:09:36

在头文件中 定义extern 你的变量 就可以了

归属感 2017-05-18 19:59:45

全局变量不可以在多个文件中定义:既不能在多个头文件中定义,也不可以在多个实现文件中定义。否则,连接时会抱怨多重定义的错误。

只能在一个实现文件中定义一次,但可以在多个头文件中声明(使用extern)。强烈建议只在一个文件中声明一次,使用时include此头文件,以保证一致性。

加上static后,确实如你查到的,“就不是多个文件共享的全局变量了,是各自文件独立的局部变量了。”

偏爱自由 2017-05-06 14:33:50

可以。
比如windows环境下,使用VC关键字在一个头文件中定义一个全局变量:
__declspec(selectany) int g_i = 0;

这样,在包含此头文件的所有源文件中,都能见到g_i这个变量,并且DLL或EXE中,g_i只有一份。

主要是关键字selectany起作用。

供参考。

清晨说ぺ晚安 2017-02-14 01:30:11

的确加了static是各自文件的独立局部变量,但这些变量都是一致的,你用全局变量不就是想公用这个变量让各文件保持一致嘛,用这种方法更好

当然你也可以在一个文件中定义,另外文件用extern声明而公用变量,只是在头文件中加static包含更清晰

灵芸 2017-01-28 11:22:10

通过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]);
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文