You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数内static修饰的局部变量多次调用为何无重定义错误

你给出的代码如下:

int func()
{
    static int number = 1;
    return ++number;
}

int main()
{
    int i = func();
    printf("i is %d", i); //This gives 2
    i = func();
    printf("i is %d", i); //This gives 3
    return 0;
}

不会产生重定义错误的核心原因

  • 首先要明确:重定义属于编译期错误,编译器在处理代码时,只会为这个func内部的static局部变量number生成唯一的定义,分配静态存储区的唯一地址,整个程序中不存在第二个number的定义,编译阶段就不可能触发重定义报错。
  • 你误解了静态局部变量的初始化逻辑:static int number = 1;这行代码的初始化操作仅会在第一次调用func函数时执行一次,后续调用func时会直接跳过初始化逻辑,复用已经存在的number变量的当前值,运行阶段根本不会重复执行定义、初始化操作,自然不会出现冲突。
  • 静态局部变量的存储位置在全局静态存储区,生命周期和整个程序的运行周期一致,但作用域仅局限在func函数内部,和普通全局变量的区别只是作用域被限制,不存在重复定义的问题。

内容的提问来源于stack exchange,提问作者Gaaaavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:54:04