static、extern分析
2017-02-08 14:56
246 查看
1.extern
extern在变量声明中有这样一个作用:你要在demo2.cpp中引用demo1.cpp中的一个全局变量,就要在demo2.h中用extern来声明这个全局变量(或者在demo1.h中声明,demo2.cpp中引入demo1.h)。demo1.h代码:
demo1.cpp代码:
demo2.cpp代码:
2.static
static的最主要功能是隐藏,其次因为static变量存放在静态存储区,它具备持久性和默认值0。
1.静态全局变量在声明它的整个文件是可见的,而在文件之外是不可见的。
上述extern的例子中已经表明,demo1.cpp中 static 修饰的全局变量 g_sniii,即便是在 demo1.h 中加了extern声明,在demo2.cpp中仍然无法使用。
2.静态局部变量
在上述demo1.cpp中的printStr()中定义一个静态局部变量,和一个局部变量
在demo2.cpp中如下调用:
运行结果:
这是因为:
1.静态局部变量被编译器放在全局存储区,所以它虽然是局部的,但是在程序的整个生命周期中存在。
2.静态局部变量如果没有被用户初始化,则会被编译器自动初始化赋值0,以后每次调用该静态局部变量的时候,都从全局存储区读取上次修改之后的值,而不会每次都初始化。
所以上述例子,两次调用printStr()之后,静态局部变量siii值为2。
3.static函数
下面是中兴通讯2012校招笔试题的一道问答题:
1. static全局变量与普通的全局变量有什么区别 ?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
static全局变量只初使化一次,防止在其他文件单元中被引用
2. static局部变量和普通局部变量有什么区别 ?
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
static局部变量只被初始化一次,下一次依据上一次结果值
3. static函数与普通函数有什么区别?
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
相关文章推荐
- extern与static分析
- 全局变量、局部变量与关键字static、extern的使用分析
- static、extern分析总结
- 【VS开发】static、extern分析总结
- 【static&extern】static、extern分析总结
- extern与static的链接属性分析
- 说明以下关键字的作用 auto static register const volatile extern
- 关键字auto、static、register、const、volatile、extern
- auto/static/register/const/volatile/extern
- c#中static的作用及代码分析
- c语言中的static和extern关键字总结
- public static void main(String[] args) 分析
- (转)C/C++中 const,extern,static,volatile的使用
- 关键字:auto、static、register、const、volatile 、extern 总结
- c语言static与extern的用法
- 【转】关键字:auto、static、register、const、volatile 、extern 总结
- C++关键字(static/register/atuo/extern/volatile/const)
- C++关键字(static/register/atuo/extern/volatile/const/inline/define/typedef)
- 文件包含 static inline,extern inline
- C++关键字(static/register/atuo/extern/volatile/const)释疑