c - 在C中的多个源文件中包含头文件

标签 c

考虑以下示例: 标题.h:

typedef struct
{
    int value;
}My_Struct;

void edit(int num);
int get();

标题.c

My_Struct data={0};

void edit(int num)
{
      data.value = num;
}
int get()
{
     Return data.value;
}

如果两个文件 file1.c 和 file2.c 都包含 header.h 并且 file1.c 调用 edit 函数将值更改为 99,从 file2.c 调用的 get 函数会返回 99 还是初始化的 0?

我希望它会返回 0,并且每个文件都有自己的 My_Struct 副本。

最佳答案

假设 file1.c 和 file2.c 与 header.c 一起链接到一个可执行文件中,它们将引用相同的变量。因此,如果您从 file1.c 中的函数调用 edit 并使用值 99,则随后从 file2.c 中的函数调用 get 将返回 99。

获得不同结果的唯一方法是将 My_Struct 的实例传递给这些函数,这样每个调用函数都可以使用不同的实例。

另一方面,如果 file1.c 和 file2.c 分别链接到单独的可执行文件中,那么每个文件(实际上是每个正在运行的实例)都将拥有自己的 data 副本。

关于c - 在C中的多个源文件中包含头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39875762/

相关文章:

c - 从链接列表中删除和附加列表

c - 缓冲区溢出 esp 偏移量

c - 具有多个客户端 C/unix 的简单 TCP 服务器

mysql - 如果我为每个线程初始化一个 mysql 连接,mysql_query 是线程安全的吗?

c - 如何停止用替换字符 � 替换字符?

c - 创建了多少进程

c - 在 C 中初始化指向复合文字的指针

c - 获取函数指针以供其他函数使用

c - C物理程序中的不规则行为

c - 为什么使用 DDD 时没有出现设置断点挂起的选项?