在编写应用程序时,我编写了一个查找表(整数数组)
在执行查找时,我编写了一个api,它接受输入并返回一个输出,查找表在该api中定义。?
我应该将全局范围内的查找数组初始化为const数组(将其放在数据段中)
在api中初始化它/在数据段中定义它有什么好处?
PS:查找表小于50。
答案 0 :(得分:3)
封装的原则是每个“类”(或对象,或结构,......)必须披露关于其内部结构的信息的最少量,因此它取决于您的设计。
将查找表声明为const数组通常是一个很好的规则:编译器将优化数组(例如,将其置于低速写入时间和良好的访问时间内存库中)。
如果您需要从位于多个文件中的代码访问查找表,请在单独的文件xxxLookupTable.c
中声明您的表,在xxxLookupTableManager
中围绕它写一个包装器(如xxxLookupTable.h
)并在需要查找的地方链接标题
答案 1 :(得分:3)
我的典型方法是:
int lookup_stuff(int stuff)
{
static const int table_of_stuff[] = { 1, 2, 7, 8, 14, 20, 24, 29, ... };
assert(stuff < sizeof(table_of_stuff)/sizeof(table_of_stuff[0]));
/* if stuff comes from an external source, such as a user modifiable text file,
the assert should be converted to an "if" so that it's present in all
versions of the code, not just debug builds */
return table_of_stuff[stuff];
}
答案 2 :(得分:1)
所有软件设计最重要的是管理复杂性,如果将查找表定义为全局结构,稍后可能会在访问查找表的模块之间创建不必要的依赖关系。因此,拥有API是一种更好的方法恕我直言(假设没有其他因素表现)。使用API,您可以更改查找表的大小,而不必担心某些模块会占用一定的大小并进行错误处理。
答案 3 :(得分:0)
避免全局的选项是将其声明为提供查找功能的函数内的静态