本文主要是介绍全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.
-------1. 请高手用VC举个例子.
2. 如何在不同的C文件中以static形式来声明同名全局变量?
答案
-
0
登录进行投票 全局变量可不可以 定义在 可被多个.C文件包含的 头文件中 ?为什么?
答:可以,extern 和 static 都行,但有一点需要注意,看例子
我们有一个 global.h 文件和三个 c 文件
Code Snippet
// global.h ,注意这里绝对不能赋初值
static int g_current;
extern int g_count;
Code Snippet
// a.c
#include global.h
void func1()
{
g_current++;
g_count = 3;
}
// 主入口,这里无关紧要
int main()
{
return 0
}
Code Snippet
// b.c
#include global.h
void func2()
{
g_current++;
g_count = 5;
}
Code Snippet
// c.c
#include global.h
void func3()
{
g_current--;
g_count = 11;
}
这样的话三个c文件就是公用这两个全局变量了。但还有一些问题:
对于 extern int g_count 编译不通过,因为大家都是 extern,没有一个是实体
对于 static int g_current 编译可以通过,但逻辑不对,因为没有初始化,这个static变量就没有任何意义了
所以实际使用中需要对其中的任何一个c文件做一下改进,比如入口函数所在的 a.c
Code Snippet
// a.c
#include global.h
int g_count; // 这里才是真正的定义,其他地方的都是引用这里的
// 虽然这里也在h中声明了一次extern,但没有影响
void func1()
{
g_current++;
g_count = 3;
}
// 主入口,这里无关紧要
int main()
{
g_current = 0; // 对static变量初始化。由于无法在定义时做,那么就在入口函数里完成好了。
return 0
}
之后编译运行都正常。
原文地址: http://social.msdn.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/5ed926a7-5572-440e-bd20-e387690f5c43/
这篇关于全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!