刚才迷茫在static的使用,于是看到下面的解释觉得好棒!我在看的C语言程序设计并没有如此详细的解释,谁能推荐一本类似于解释原理的书,就像下图中那种的,告诉你一些名词解释,代码被读取后在系统中如何被分析,被使用?感激之情将溢于言表!
以前在图书馆看到过一本叫做 你必须要知道的C256个问题 (大概是叫这个) 里面都是一些很基础的名词解释 或者一些容易弄混淆的知识点
c primer plus
static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束了。但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。
static对函数的修饰与对全局变量的修饰相似,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。
提个建议:
要想真正掌握,就去做。
纸上谈兵都是瞎扯蛋。
同一个static,在不同情形:不同编译环境、不同版本、不同过程、不同对象中的定义与实际用途都可能不同,任何一本书都只能描述过去,没办法反映现在更没办法预测未来。
你手头有啥,就去掌握它,同它的特性,别相信书!
学习一下由源代码到可执行代码的compilation process,尤其是链接过程,就不难理解static在不同地方的用处了
建议读一下《程序员的自我修养—链接、装载与库》
《c和指针》这本书很不错(中文翻译的很棒),比如你很难想到"adc"[2]会输出什么。甚至可以这样写2["abc"].
关于static,我觉得有一个很好的例子。你在一个函数里面定义一个一千万长度的int型数组,编译时会报错。然后做一点修改,在数组前面加个static。
就能顺利通过了。这个例子可以很深刻的说明static型的数据是单独放到一块内存中的。