在C++中,static型的变量的定义是否应该放在头文件中?

xinxiakk 2005-09-15 08:41:00
在C++中,static型的变量的定义是否应该放在头文件中?并且头文件中除了能放const,inline外,一般还放一些什么?如果static能放在头文件中的话,那么被2个不同的cpp文件分别引入时,不是造成了static变量的2个映象?
...全文
1357 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagicCarmack 2005-09-16
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。。。。
husl 2005-09-16
  • 打赏
  • 举报
回复

不会的
void fun()
{
static int a = 0;
cout << "a is" << ++a <<endl;
}
int main()
{
fun();
fun();
return 0;
}

输出的 1 ,2 是预期结果

按离调用了两次fun 应有两分拷贝 但事实不是

头文件那种你也可以试一下
应该 具体到static的实现机制吧
SammyLan 2005-09-16
  • 打赏
  • 举报
回复
static变量的声明或者定义放在头文件是死罪一条
(=_=)
fiftymetre 2005-09-16
  • 打赏
  • 举报
回复
C++里的全局static变量没有什么意义的,不用加static

全局变量放在头文件里比较好,我们的项目就是这么做的
gnixemos 2005-09-16
  • 打赏
  • 举报
回复
在头文件中,一般是变量的声明,就是extern 类型 变量名;

在cpp文件中,是变量的定义 ,static 变量类型 变量名 = 0 ;

放在头文件中,所有include 这个头文件的cpp 都能用到这个变量;


如果static直接放在cpp中,不放在.h中,则只能在这个cpp中static变量定义后能被引用到;


类中的static变量也是随类的声明一样放在.h中。定义在cpp中。

基本和楼上意见一致;


zhouhuahai 2005-09-16
  • 打赏
  • 举报
回复
C++里的全局static变量没有什么意义的,不用加static

非也非也, static变量是有文件作用域的, 在a.c中定义的,就不能在b.c或者其它文件中用了.
至于static变量, 如果要把它的声明放进.h文件, 则它就不应该是一个static变量了, static变量一般是放在.cpp或.c文件中,且声明和定义在一起.

有一个特例: 类中的static成员变量, 一般声明在.h, 定义在.cpp.
counter_windows 2005-09-16
  • 打赏
  • 举报
回复
我认为,static int g_value 能使其他文件不能访问,致使extern失效. 是本文件的所特有。 防止篡改,降低耦合。
K 2005-09-15
  • 打赏
  • 举报
回复
.h文件中放声明,上面写错了
K 2005-09-15
  • 打赏
  • 举报
回复
.h文件中放定义
.c文件中放实现
viewpl 2005-09-15
  • 打赏
  • 举报
回复
如果static放在头文件中的话,被2个不同的cpp文件分别引入时,那么这两个cpp都有一个自己的这个static变量,并且相互不受影响,你可以这么做,但这可能多数不是你想要的。
xinxiakk 2005-09-15
  • 打赏
  • 举报
回复
mingming_lu(初来乍到)
static 和extern是一对反义词
static 是局部的,extern是全局的
过来解释一下
  • 打赏
  • 举报
回复
比如:在test.c文件中定义变量static int global = 0;
******

可以在头文件test.h中声明这个变量为:extern int global;
******

要使用这个变量的其他文件,只要包含test.h就可以了。

//楼上回来重新讲讲-_-
逍遥过客 2005-09-15
  • 打赏
  • 举报
回复
变量的定义一般不放在头文件里,但可以把声明放在头文件里,供其他文件引用这个变量。

比如:在test.c文件中定义变量static int global = 0;

可以在头文件test.h中声明这个变量为:extern int global;

要使用这个变量的其他文件,只要包含test.h就可以了。
doway 2005-09-15
  • 打赏
  • 举报
回复
变量都不可以放入头文件里。

这回我没讲错吧。
源码下载地址: https://pan.quark.cn/s/a365564a81ea 在C++软件开发头文件(扩展名为.h)与实现文件(扩展名为.cpp)构成了代码架构的关键组成部分,它们对于代码的模块化设计、功能重用以及系统化维护具有重要作用。 头文件主要承载类结构、函数接口以及其他外部实体的宣告信息,而实现文件则详细记录了函数的具体编码实现和类的成员函数细节。 1. 头文件(.h) - 全局变量宣告:在头文件内,全局变量借助`extern`关键字进行声明,但并不进行实际定义。 这种做法仅标明变量的存在性,其具体的定义和初始化工作应在对应的实现文件完成。 - 全局函数宣告:函数的接口规范在头文件进行声明,以便其他文件通过包含此头文件来识别函数的存在及其参数规格。 - `inline`全局函数编码:若期望全局函数能够被编译器进行内联优化处理,可在头文件应用`inline`关键字。 然而,内联的采用并非强制性要求,其最终执行取决于编译器的支持情况。 - 类结构声明:类的整体设计,包括成员函数的接口以及数据成员的设定,都在头文件完成。 若成员函数具备`inline`特性,亦可在类定义内部直接编写。 - `static const`数据成员:静态常量数据成员可在类定义直接进行声明和初始化。 - 模板类设计:模板类的宣告与定义均可在头文件实现,因为模板结构需要在编译阶段进行解析,所以必须提供所有必要的数据信息。 2. 实现文件(.cpp) - 全局变量实现:全局变量在实现文件进行实际定义并可能伴随初始化过程,确保每个编译单元(即每个.cpp文件)仅拥有一份定义。 - 全局函数实现:函数的实际编码工作在实现文件进行。 这些函数的接口声明已存在于相应的头文件。 - ...

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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