假设我在C中创建一个名为plots的简单库。假设我有一些函数,例如PlotFunction()
,SetTitle()
,SetScale()
等。我们也说我想要提供一些基本图,例如Triangle
,Rectangle
等资源文件。我认为这些资源将作为数组(e.g. triangle[] = {0, 1, 2, 3, 2, 1, 0}
)
这是一个可以将数据包含在头文件中的示例吗?通常我认为头文件是为函数原型保留的,但这似乎是一个在头文件中包含变量/结构的实例。
这被认为是不好的做法吗?有更好的替代方案吗?
答案 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。