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

C语言跨文件全局变量共享疑问:多次运行程序为何未保留值?

现有文件内容

main.c

#include <stdio.h>
#include "library.h"

int main()
{
    print();
    add_one();
    print();
    
    return 0;
}

main2.c

#include <stdio.h>
#include "library.h"

int main()
{
    print();
    add_one();
    print();

    return 0;
}

library.c

#include <stdio.h>
#include "library.h"

int number = 0;

void add_one(){
    number++;
}

void print()
{
    printf("number: %d\n", number);
}

library.h

extern int number;

void add_one();
void print();

问题描述

先运行main程序,再运行main2程序,两者的输出均为:

number: 0
number: 1

预期main程序输出上述结果,但main2程序应输出number: 1、number: 2,请问这是为什么?

原因分析

main和main2是两个独立的可执行程序,运行时会被操作系统加载为完全独立的进程,每个进程拥有自己专属的内存空间,进程之间的内存是完全隔离的。

  • 运行main时,它的进程会初始化自己内存空间里的number变量为0,执行add_one()后变量变为1,程序退出后,操作系统会回收该进程的所有内存资源。
  • 运行main2时,操作系统会为它分配全新的内存空间,library.c中的number会被重新初始化为0,后续执行逻辑和main完全一致,所以输出结果相同。

进程之间不会自动共享内存数据,除非使用专门的进程间通信(IPC)机制(比如共享内存、管道等),否则两个程序的变量状态互不影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:18