1.整个程序中共用的变量
在.h文件中声明:
extern int i;
在.cpp文件中定义:
int i=0;
也可以声明和定义一起完成:
extern int i=0;
此时,变量是在静态数据区分配的,extern可以不写,但变量前不能加上static。
使用时先要做如下声明,并且不要将.h文件include进来:
extern int i;
2.仅在一个文件中共用的变量
一般在.cpp文件中声明并定义:
static int i=0;
此时,
变量也是在静态数据区分配的,必须加上static,static在此处不表示静态,而是范围修饰符,表示此变量的作用域仅为当前文件。
如果是在.h文件中声明并定义:
static int i=0;
则多个.cpp文件include此.h文件后,
各个.cpp文件不会共用此静态变量i,而是各自创建各自的静态变量i,彼此之间互不影响。
3.在类中共用的静态变量
在.h文件中声明:
class A{
static int i;
}
在.cpp文件中定义:
int A::i=0;
此时,
变量也是在静态数据区分配的,static表示定义的是一个静态变量。变量的作用域在类A的内部,且变量可以被类A的所有实例中访问。
4.在方法中共用的静态变量
void func(){
static int i=0;
}
此时,
变量也是在静态数据区分配的,static表示定义的是一个静态变量。变量的作用域仅在方法func的内部。
5.整个程序中共用的函数
声明和定义的方式与整个程序中共用的变量一样
在.h文件中声明:
extern void func();
在.cpp文件中定义:
void func(){
// do something;
};
也可以声明和定义一起完成:
extern void func(){
// do something;
};
此时,extern可以不写,但函数前不能加上static。
使用时先要声明,但.h文件不要include进来:
extern void func();
6.仅在一个文件中共用的函数
一般在.cpp文件中声明并定义:
static void func(){
// do something;
};
此时,
必须加上static,static在此处不表示静态,而是范围修饰符,表示此函数的作用域仅为当前文件。
如果是在.h文件中声明并定义:
static void func(){
// do something;
};
则多个.cpp文件include此.h文件后,
各个.cpp文件各自使用自己的func()。
7.在类中共用的静态函数
在.h文件中声明:
class A{
static void func();
}
在.cpp文件中定义:
void A::func(){
// do something;
};
此时,
static表示定义的是一个静态函数。函数的作用域仅在类A的内部。