全局变量 vs. 静态全局变量
-
非静态全局变量(普通全局变量):
- 在所有源文件中可见。
- 可以在其他源文件中通过
extern
关键字进行引用。
-
静态全局变量:
- 仅在定义该变量的源文件中可见。
- 无法在其他源文件中访问。
static
函数 vs. 普通函数
-
静态函数:
- 只在定义它的源文件中可见。
- 作用域被限制在当前源文件。
-
普通函数:
- 可以在其他源文件中通过函数声明使用(通常通过头文件)。
示例代码与注释
全局变量示例
文件 file1.cpp
:
#include <iostream>
int globalVar = 10; // 普通全局变量
static int staticGlobalVar = 20; // 静态全局变量
void printVars() {
std::cout << "globalVar: " << globalVar << std::endl;
std::cout << "staticGlobalVar: " << staticGlobalVar << std::endl;
}
文件 file2.cpp
:
#include <iostream>
extern int globalVar; // 引用file1.cpp中的普通全局变量
// 无法引用 staticGlobalVar,因为它是静态全局变量,file2.cpp中不可见
void modifyVars() {
globalVar = 30;
// staticGlobalVar = 40; // 错误:无法访问静态全局变量
}
int main() {
modifyVars();
std::cout << "After modifyVars, globalVar: " << globalVar << std::endl;
return 0;
}
static
函数示例
文件 file1.cpp
:
#include <iostream>
static void staticFunction() { // 静态函数,只在file1.cpp内可见
std::cout << "This is a static function." << std::endl;
}
void regularFunction() { // 普通函数,可以在其他源文件中声明和使用
std::cout << "This is a regular function." << std::endl;
}
void callStaticFunction() {
staticFunction(); // 可以调用静态函数,因为它们在同一个文件中
}
文件 file2.cpp
:
#include <iostream>
// void staticFunction(); // 错误:无法声明file1.cpp中的静态函数
void regularFunction(); // 声明file1.cpp中的普通函数
int main() {
// staticFunction(); // 错误:无法调用file1.cpp中的静态函数
regularFunction(); // 可以调用file1.cpp中的普通函数
return 0;
}
总结
- 全局变量:普通全局变量可以在多个源文件中访问和修改,静态全局变量仅能在声明它的源文件中使用。
static
函数:静态函数只能在声明它的源文件中调用,而普通函数可以在多个源文件中声明和调用。
希望这些整理和示例代码能帮助你更好地理解全局变量和静态变量的区别!