深入剖析 C++ 中的全局变量与静态变量

全局变量 vs. 静态全局变量

  1. 非静态全局变量(普通全局变量)

    • 在所有源文件中可见。
    • 可以在其他源文件中通过 extern 关键字进行引用。
  2. 静态全局变量

    • 仅在定义该变量的源文件中可见。
    • 无法在其他源文件中访问。

static 函数 vs. 普通函数

  1. 静态函数

    • 只在定义它的源文件中可见。
    • 作用域被限制在当前源文件。
  2. 普通函数

    • 可以在其他源文件中通过函数声明使用(通常通过头文件)。

示例代码与注释

全局变量示例

文件 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 函数:静态函数只能在声明它的源文件中调用,而普通函数可以在多个源文件中声明和调用。

希望这些整理和示例代码能帮助你更好地理解全局变量和静态变量的区别!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值