不可行,如果在头文件中定义静态变量,会造成资源浪费,同时也可能引起程序错误。因为如果在使用了该头文件的每个C语言文件中定义静态变量,按照编译的步骤,在每个头文件中都会单独存在一个静态变量,从而引起空间浪费或程序错误。
所以,不推荐在头文件中定义任何变量。
C语言中,static(静态)变量的作用在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量只会被初始化一次,然后在这一函数被调用的过程中其值维持不变在文件内(但在函数体外),用来限制变量或函数的作用域为当前文件,即如果一个变量被声明为静态的,那么该变量可以被当前文件内所有函数访问,但不能被其他文件中的函数访问。它是一个本地的全局变量,且只会被初始化一次。如果一个函数被声明为静态的,那么该函数与普通函数作用域不同,其作用域仅在本文件中,它只可被当前文件内的其他函数调用,不能被其他
1.先来介绍它的第一条也是最重要的一条:隐藏。(
static
函数,
static
变量
均可)
当同时编译多个文件时,所有未加
static
前缀的全局
变量
和函数都具有全局可见性。
举例来说明,同时编译两个源文件,一个是a.c,另一个是main.c。
//a.c
char a = 'A'; // global variable
void msg()
printf("Hello\n");
//main.c
int main()
extern char a; // extern v
C/
C++
中的
静态变量
1.
静态
全局
变量
2.
静态
局部
变量
3.
静态
函数4.类内
静态
成员
变量
5. 类内
静态
局部
变量
6.类内
静态
函数
C语言中与“
静态
”相关的词包括,
静态
全局
变量
,
静态
局部
变量
和
静态
函数,关键词是
static
。C语言中的
变量
从
作用
域分,可以分为全局
变量
和局部
变量
;从存储方式分,可以分为
静态
存储方式和动态存储方式。
需要区分的概念是,全局
变量
是存储在
静态
存储区的,所谓的
静态
存储区是一个进程所分配内存的.bss和.data段,但全局
变量
不是并不是
静态变量
。
1.
静态
全局
变量
下面代码中的a属于全局
类定义时的
静态
成员只是声明,
静态
成员的定义和初始化要在类之外完成
C++
的
static
关键字可修饰类成员
变量
/方法,表示
变量
/方法不从属于特定对象,而是属于类的。仔细琢磨
静态
成员
变量
,会发现其与
C++
的方式既相容也矛盾,具有特殊性。
先说相容的一面。·C/
C++
·有声明和定义的说法:声明给出签名,定义给出具体实现。对类型而言,声明不一定能知道其对象占用空间大小,但根据定义肯定能确定内存占用。说
静态
成员与
C++
方式是相容的,因为其初始化方式与方法的定义一致。下面是一个例子:
// Foo.hpp
namespace tlanyan {
// 类声明和定义
class Foo {
静态
局部
变量
:进程的运行过程中,函数退出不被销毁
静态
全局
变量
:只能被本文件的函数调用访问,对其他源文件不可见
静态
函数:只在声明它的文件中可见,对其他源文件不可见。定义时不加
static
作用
总结:
1、隐藏。对其他源文件不可见。与其他文件的同名函数或
变量
不存在冲突问题,降低模块间的耦合度。
2、持久性,在进程运行过程中不释放
3、如果不赋初始值,初始化默认值为0;
C++
中的
static
C++
中的
static
面向过
C++
中
静态
成员函数与
静态
成员
变量
(
static
)
这篇介绍了
静态
成员函数与
静态
成员
变量
,是我的读书笔记,我希望它够简短但又比较全面,起到复习的
作用
。如果有一些
C++
知识记不清楚了,它可以帮你很快回忆起来。
复习C语言的
static
关键字
(1)加在局部
变量
的前面使之成为
静态
局部
变量
,
作用
域还是在函数内部,可是生存周期延长了。
(2)加在全局
变量
的前面限定该
变量
作用
域为文件
作用
域,就是说即使其他文件使用了extern扩展
作用
域也不行。这在C语言的多人项目中非常有用,避免了
变量
的重名。然而在
C++
中这一功能已经被命名空间取代,但是为了保持和C语言的兼容,
static
还是有这样的功能。
函数定义和代码块之外的
变量
声明
static
修改标识符的链接属性,由默认的external变成internal,
作用
域和存储类型不变,这些符号只能在声明它们的源文件内部实现.
代码块内部的
变量
声明
static
修改标识符的存储类型,由自动
变量
改为
静态变量
,
作用
域和链接属性不变。这种
变量
在程序执行之前就创建,在程序执行的整个周期都存在。
类成员
变量
和成员函数
对于被stati...
全局
变量
和
静态变量
都是在程序运行时分配内存的
变量
,但它们在
作用
域和生命周期上有所不同。
全局
变量
的
作用
域是整个程序,它们在程序启动时被分配内存,在程序结束时才会被释放。在定义全局
变量
时,如果没有使用
static
关键字修饰,则全局
变量
是外部链接的,可以被其他文件引用,如果使用了
static
关键字,则全局
变量
是内部链接的,只能被定义的文件内部访问。
静态变量
的
作用
域是在定义它们的函数内部,但它们的生命周期与全局
变量
相同,也是在程序启动时分配内存,在程序结束时才会被释放。
静态变量
只会被初始化一次,即使函数被多次调用,
静态变量
的值也会保持不变。如果在定义时使用了
static
关键字,则该
静态变量
只能在定义它的函数内部访问,如果没有使用
static
关键字,则该
静态变量
可以被其他函数访问。