在c文件之间共享全局变量

xwbd5t1u  于 2023-04-29  发布在  其他
关注(0)|答案(2)|浏览(122)

我有以下文件:

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;
}

库.c

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

int number = 0;

void add_one(){
    number++;
}

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

库.h

extern int number;

void add_one();
void print();

当我先运行main,然后运行main2时,得到的结果是一样的:编号:0编号:1.不应该是数字:0和数字:1表示main,但对于main2,应该是number:1和编号:2.你知道为什么会发生这种情况吗?

ego6inou

ego6inou1#

它不应该是数字:0和数字:1表示main,但对于main2,应该是number:1和编号:2.你知道为什么会发生这种情况吗?
不能,因为mainmain2是两个不同的程序,它们之间不共享变量number。它总是在程序开始时初始化为零。

piok6c0g

piok6c0g2#

当我先运行main,然后运行main2时,得到的结果是一样的:编号:0编号:1.不应该是数字:0和数字:1表示main,但对于main2,应该是number:1和编号:2.你知道为什么会发生这种情况吗?
针对库构建的每个不同程序都将获得其自己的库副本,包括库定义的任何变量。这两个程序不会仅仅因为使用同一个库而共享数据。如果您想在mainmain2之间共享数据,则需要安排某种公共数据存储。这类事情会引发各种各样的问题,即两个程序同时修改共享数据,所以要非常小心。
实际上,即使您运行main,然后再次运行main,您将得到相同的值打印两次,因为库没有将其数据存储在任何地方。number每次运行时都会被初始化为0。

相关问题