【发布时间】:2021-12-29 04:44:47
【问题描述】:
假设我正在编写一个函数库,每个函数都使用一个全局数组来执行其职责。我不想将该数组公开给非库代码,因此我将其声明为static,如下所示:
图书馆.h:
void function1();
void function2();
库.c:
#include "library.h"
static int arr[ARBITRARY_SIZE];
void function1() {...} // both of these
void function2() {...} // make use arr
如果我现在想在我的代码中使用这个库,我会在我的代码顶部使用#include "library.c"。
如果我理解正确,#include 只需将#includeed 文件的内容复制并粘贴到位。如果是这种情况,用户代码本身将包含arr 的静态定义。鉴于此,作为库的作者,我将如何保护我的库变量?如果不是这种情况,请纠正我 #include 所做的事情!
【问题讨论】:
-
您没有将
function1和function2的实际定义放在 .h 文件中(它们放在 .c 文件中),因此您不需要arr在.h 也可以。 -
谢谢,我已经更新了问题。如果实现库函数的任何 .c 文件都包含 .h 并且用户代码包含 .c 文件,那么用户代码不是仍在声明静态变量本身吗?
-
用户代码包含 .h(不是 .c),因此永远不会看到
arr(但它确实需要与从 .c 生成的 .o 链接) -
你没有
#includeC 文件,只是头文件。 -
要使用
.c文件中的函数,请链接到相应的.o文件。