将数据放入头文件中是否可以“正常”?

时间:2016-05-12 04:28:51

标签: c header

假设我在C中创建一个名为plots的简单库。假设我有一些函数,例如PlotFunction()SetTitle()SetScale()等。我们也说我想要提供一些基本图,例如TriangleRectangle等资源文件。我认为这些资源将作为数组(e.g. triangle[] = {0, 1, 2, 3, 2, 1, 0}

保存

这是一个可以将数据包含在头文件中的示例吗?通常我认为头文件是为函数原型保留的,但这似乎是一个在头文件中包含变量/结构的实例。

这被认为是不好的做法吗?有更好的替代方案吗?

1 个答案:

答案 0 :(得分:5)

您不应将此类数据放入头文件中。代替:

extern const int triangle[];
extern const size_t triangle_size;

然后在源(.c)文件中:

const int triangle[] = {0, 1, 2, 3, 2, 1, 0};
const size_t triangle_size = sizeof(triangle) / sizeof(triangle[0]);

这样,数据只会被编译和链接一次。

但是,如果您确实需要使用此数据来有效地初始化其他变量,您可以考虑这一点:

#define TRIANGLE {0, 1, 2, 3, 2, 1, 0}

然后用户可以这样做:

int shape[] = TRIANGLE;

野外的一个着名例子是PTHREAD_MUTEX_INITIALIZER