请问一下全局变量可以定义在被多个.c文件包含着的头文件中合法马?

yangw150 2006-03-15 03:10:58
请问一下全局变量可以定义在被多个.c文件包含着的头文件中合法马?
...全文
202 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ox_thedarkness 2006-03-15
  • 打赏
  • 举报
回复
我的说法是,.h文件(能被多个源文件包含的文件)中只能定义内部连接的全局变量。

如果是外部连接的变量,只应该在.h中声明而不是定义。


extern int g_x; // 合法,声明外部连接的变量,但不定义
class A{
static int i; // 合法,声明外部连接的变量,但不定义
};
static int s_x; // 合法,声明和定义内部连接的全局变量。
// 这样每一个包含该 .h 的c/cpp文件都会有一个不同的内部全局变量

下面是不该放在.h,而应该放在某个 c/cpp 中的东西:

int g_x; // 声明+定义,而且是外部连接的全局变量。放在.h中将引起重复定义
int A::i; // 声明+定义,而且是外部连接的全局变量。放在.h中将引起重复定义

//!static int A::i; // 至于这个,则是非法C/C++代码。
yangw150 2006-03-15
  • 打赏
  • 举报
回复
全局变量包括静态的和非静态的,三楼的意思是说,只要是静态的都合法,非静态的的就不合法了?
iamcaicainiao 2006-03-15
  • 打赏
  • 举报
回复
上面的代码可以通过extern引用。
ox_thedarkness 2006-03-15
  • 打赏
  • 举报
回复
只要是 static 连接的都合法 —— 这样每个文件都有一份自己的全局变量。
下面的代码若是写在全局区,都是extern连接的,不合法。

int x;
class A{
static int i;
};
int A::i;
du51 2006-03-15
  • 打赏
  • 举报
回复
全局变量一般都这样用的.
iamcaicainiao 2006-03-15
  • 打赏
  • 举报
回复
合法

70,016

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧