c语言-C语言的static全局变量有什么意义?

问题描述

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)改变数据存储方式

时间: 2025-01-02 03:45:56

c语言-C语言的static全局变量有什么意义?的相关文章

static全局变量与普通的全局变量的区别详细解析_C 语言

(1)static全局变量与普通的全局变量有什么区别?(2)static局部变量和普通局部变量有什么区别?(3)static函数与普通函数作用域有什么不同?(4)static函数与普通函数有什么区别? (1)static全局变量与普通的全局变量有什么区别?答:全局变量的说明之前再加以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,

win7如何更改语言 电脑语言改成英文的方法

今年evad3rs团队发布的iOS 7完美越狱工具有些特殊,中国版iOS7完美越狱工具中,捆绑有太极助手插件,此插件类似流氓插件,容易导致iOS越狱设备出现白苹果现象(国外版无此插件).目前比较好的解决办法是:在使用电脑中越狱的时候,将电脑语言改为英文,可绕过该插件.但很多电脑小白用户还不知道如何更改电脑语言,因此本文将为大家详细介绍下电脑语言更改教程. 如何更改电脑语言 电脑语言改为英文方法 以下笔者以Windows 7系统截图演示,教大家如何更改电脑语言.其他XP或者Win8系统设置方法与此

c语言-C语言递归的内存释放问题

问题描述 C语言递归的内存释放问题 我用C语言实现alpha-beta极小极大算法来做一个棋类游戏的AI,博弈树是用递归的方式构造的,然后发现AI每下一步程序的内存都在增大,原来是因为递归没有释放内存. 耗内存的指针是棋盘 char ** chessboard; 于是我在递归函数的每一个return之前都把 chessboard 给释放了,发现内存还是一直在涨,求解.. 解决方案 把递归函数实现贴出来. 解决方案二: 估计释放的不全.二级指针要分两级释放. 解决方案三: 二级指针的释放是要分两步

安卓app多语言多语言切换

问题描述 安卓app多语言多语言切换 请问大神们可以帮助我吗?在我的程序里面我想实现多语言切换,调用系统的语言设置, 改变我自己的app语言,但是不改变系统的显示语言,这样怎么实现? 解决方案 http://blog.csdn.net/forrey/article/details/44547813 去这里看看说不定对你有帮助! 解决方案二: http://my.oschina.net/jack1900/blog/290694http://blog.csdn.net/cento123/articl

c语言-C语言实现文件合并的问题

问题描述 C语言实现文件合并的问题 之前已经编写了一个程序,可以实现.txt的文件内容追加写,可是对两个视频操作的时候就行不通了.但是又不知道问题出现在哪里,视频能合并,文件大小是两个文件的和,可是新和成的文件内容只显示一个文件的内容.这个要怎么解决. 解决方案 视频文件不是简单两个文件叠加.视频文件包含复杂的结构,文件头部分指定了这个视频的格式,有多少帧,存储的偏移地址是什么你简单合并两个文件,播放器只知道根据第一个文件的文件头找数据,附加在后面的第二个文件是读不到的.你需要重新编码得到一个完

c语言-C语言的文件问题????????

问题描述 C语言的文件问题???????? 我如果想往C的文件里写入数据,我要事先手动建立一个.txt文件吗?还是有其他方法自动创建? 解决方案 O(NlgK)问题优先队列实现文件C语言C语言中头文件相互包含问题c语言中,文件路径读取问题 解决方案二: 不用手动建立文件的,c语言里有很多文件操作函数,可以自动建立文件,并可以写入你想写入的数据 解决方案三: 我也想提这样的问题.不过既然是C的文件,我觉得应该是创建.C文件吧,.TXT是文本格式的,估计是不行的. 解决方案四: c语言中可以通过代码

c语言-C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环

问题描述 C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环 C语言用递归求圆周率的值,要求精确到小数点后3位,不得使用循环 解决方案 http://jingyan.baidu.com/article/bea41d437c69b8b4c51be6e9.html 解决方案二: public class Test { public static void main(String[] args) { System.out.println("怎么插入代码块.."); } }

c语言-C语言,如何在一个函数内部,获取这个函数入口点的地址?

问题描述 C语言,如何在一个函数内部,获取这个函数入口点的地址? 1C # Git@OSC 的 Android 和 iOS 客户端全面开源 include #include void show(void* p) { printf(""%pn""p); } int main() { show(&show); show(show); return 0; } Output: 1 2 0x8048480 0x8048480 解决方案 答案处处有.函数名称就是入口地址

编程c语言-c语言如何获取2G以上文件的文件大小?

问题描述 c语言如何获取2G以上文件的文件大小? 试过GetFileSize,但总是返回一个负数.有什么办法可以解决? 好像网上说有一个GetFileSizeEx可以,但是我试过也不行,不知道是不是我用法错了 解决方案 获取文件大小(C语言)获取文件大小(C语言)c语言文件大小获取 解决方案二: http://c.biancheng.net/cpp/html/326.html 解决方案三: http://blog.163.com/huangguoqiang_123@126/blog/static