假设我正在制作一个C程序,当用户输入宝石的名字时,该程序会显示有关宝石的信息.
石头名称永远不会改变,并且只有不到20个,所以在运行时从外部文件读取它们似乎有点矫枉过正.
我还需要从多个文件中访问这些名称(比方说两个).
我通常做的是我声明一个全局char*数组,如下所示:
char *g_rsc_names[] = {"linemate", "deraumere", "sibur", "mendiane", "phiras", "thystane"};
Run Code Online (Sandbox Code Playgroud)
在文件中我需要使用它们.这看起来很好,但这只允许我访问我声明这个全局数组的文件中的名称.
在这种情况下,存储石头名称的最佳/最干净的方法是什么?
您可以使用函数包装数组,该函数返回const char*相应的石头名称,并将该声明放入包含在多个文件中的全局头文件中:
const char* get_stone_name(size_t id);
Run Code Online (Sandbox Code Playgroud)
在源文件中定义get_stone_name类似:
const char* get_stone_name(size_t id) {
static const char* const names[] = {
"linemate", "deraumere", "sibur", "mendiane", "phiras", "thystane"
};
return (id < (sizeof(names) / sizeof(names[0])) ? names[id] : "");
}
Run Code Online (Sandbox Code Playgroud)
Decaring names如static将保证不会超过一次初始化,并且作为一个侧选项,您可以防止用户索引你的数组越界.