问题描述
- C语言的static全局变量有什么意义?
-
.h文件中的全局变量用了static修饰,但被其它文件包含后,这个static全局变量还是可以被其它文件访问,那我声明为static有什么意义?
怎样才能让我的头文件在被其它文件包含后其中的全局变量不被这个文件访问到?
解决方案
全局 static,就是其他文件都能访问,尽量减少此类变量
要像不被访问,就别做成public的
解决方案二:
头文件被包含的含义起始很简单,就是机械地将这个头文件插入所包含的源代码的include所在的位置,编译器最终编译这个可执行文件。
因此你写在include中的任何内容,包括定义变量,和在你的源代码的include的地方直接写一遍没有区别。
你非要让它不存在,只能用条件编译,但是就你的需求,无疑是自找麻烦。
解决方案三:
静态变量就是有限制作用域,它是模块内可见,这样可以多个模块定义相同名字静态变量,从而不会冲突。如果不想被其它包含头文件的模块访问,那么就把变量放到c文件中,不要放头文件。
解决方案四:
你自己都说 了是全局
变量了,怎么可能不被别人访问呢?
要不被访问,就不要做全局
.
去看看变量作用域吧基础知识。
解决方案五:
用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。
如果不想被其它包含头文件的模块访问,那么就把变量放到c文件中,不要放头文件。
C文件里不给函数加static外部文件也无法访问这个函数,是因为默认存储形式是static,也就是变量只限本文件使用。但如果在变量前加static,是为了凸显,或者显式告诉开发者、编程人员,本变量只限本C源文件使用,或者说其他文件种可能有和它同名冲突的变量存在~
解决方案六:
要么不声明为static,要么放到.c里面。
解决方案七:
或者这么说,定义成static 可以被本模块改变它的值,但是别的模块不能,别的模块只能用它的值。它的生存周期是在整个程序运行的生存周期都存在的
解决方案八:
把static声明的变量放在头文件里是一件多么愚蠢的事,本来static就是告诉你这个变量只在当前作用域可以使用,放头文件还有何意义?好好看一下华为C语言程序规范吧
解决方案九:
不想被访问就定义在.c中
解决方案十:
(1)改变文件作用域
(2)改变数据存储方式