什么是定义查找表的合适位置?

时间:2013-07-04 10:54:30

标签: c

在编写应用程序时,我编写了一个查找表(整数数组)

在执行查找时,我编写了一个api,它接受输入并返回一个输出,查找表在该api中定义。?

我应该将全局范围内的查找数组初始化为const数组(将其放在数据段中)

在api中初始化它/在数据段中定义它有什么好处?

PS:查找表小于50。

4 个答案:

答案 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)

避免全局的选项是将其声明为提供查找功能的函数内的静态