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