【发布时间】:2013-10-08 13:00:24
【问题描述】:
我有一个数组static const char* keys[]。我可以将头文件中的数组声明为
static const Char* keys[] = {
"id",
"ip", // a growing array.
}
还是应始终在.c 文件中进行声明?
【问题讨论】:
我有一个数组static const char* keys[]。我可以将头文件中的数组声明为
static const Char* keys[] = {
"id",
"ip", // a growing array.
}
还是应始终在.c 文件中进行声明?
【问题讨论】:
我想这会工作,但是每次将头文件包含在 C 文件中时,都会为新数组分配内存。这意味着您可能会拥有同一个数组的多个副本。
我认为你想要做的通常方法是:
c 文件:
const char* keys[] = {
"id",
"ip", // a growing array.
}
h 文件:
extern const char* keys[];
这样你只有一个内存分配,并且可以在其他模块中引用这个位置。
另一种方法是创建数组 static(h 文件中没有任何内容)并编写 get 函数来访问字符串。
您拥有static 的理由是什么?
【讨论】:
实际上它是您问题中的对象定义,声明不会实例化数据结构/类等。
因此,如果您将此对象定义移动到 *.c 文件,那么您将无法从其他来源访问它。这是一种静态影响。猜猜,这不是你需要的。
但是,如果您删除 static 并将定义放入 *.c 并将声明添加到 *.h 文件,那么您会为每个头文件的包含保存一个内存,用于您的对象大小(每个包含将指向一个 const 结构)。
现在,在您的情况下,每个包含都会以对象的大小增加二进制文件的大小。
【讨论】: