如何在C语言中处理任意数据集



我目前正在学习编码(主要是C语言,但也有其他语言),现在在几个项目中我遇到了同样的"问题":

我经常要处理任意的数据集。例如,我可能需要编写一个程序,该程序将以标准形式接收一定数量的命令(为了示例起见,假设为11个),但我希望编写一个灵活的代码,因此,例如,如果我稍后回到这个项目并想要添加其他命令,我希望能够轻松地做到这一点。

我需要在代码的某个地方手动输入这些命令的名称。我目前喜欢的一种方法是使用结构数组,每个元素包含一个char*作为命令的名称,一个函数指针用于控制命令所做的功能。

问题是,到目前为止,我还没有真正以一种完全满足我的方式实现这个数组。

我从它得到的最接近的是通过一个单例,每次我需要的数组我只是调用我的单例,但从那时起,我已经了解到,单例本质上构成了与全局变量相同的问题。我学过一些关于依赖注入的知识,但是这个原则似乎只适用于面向对象的语言。

是否有一种方法不使用单例我想在C中做什么?

TL;博士:我需要在代码中构建任意数据集,我如何以优雅且易于维护的方式实现这一点?

感谢抽出时间回答问题的人。

的例子:

我有一个程序监听标准输入上的命令,然后执行这些命令。每次读取输入时,我将其与预定的命令列表(以字符串的形式)进行比较,如果有匹配的命令,则执行相应的代码。

如何创建字符串集合?如何创建对应于每个字符串的函数集?你怎么把这两组联系起来?你如何使这个组合集在任何地方都可以轻松访问?

到目前为止,我对这个问题的回答是:

s_cmds *singleton(void)
{
    static s_cmds ret[] = {{"cmd1", &func_cmd1}, {"cmd2", &func_cmd2}, ...};
    return (ret);
}

带结构:

struct s_cmds {
    char *cmd;
    void (*func_cmd)(...);
};

这样,不管我想如何改进我的代码,如果我想添加一个命令,我只需要在我的单例中添加一个元素,如果我想在代码的其他地方访问这个数组,我只需要调用单例。但这实际上就像使用一个全局变量,不是吗?

有没有更"干净"的方法?

您的描述非常模糊,但我认为您正在寻找X-Macros:

https://en.wikipedia.org/wiki/X_Macro

是一种代码结构,用于将不同类型的相关代码绑定在一起。常见的用例是处理错误代码及其文本表示。

我不完全确定你的问题,但从它的声音,我认为你正在寻找一个数据结构,如链表。你可以添加元素,即你的新命令,它比任何你会做一个常规数组容易得多。显然有优点也有缺点,在不了解您的问题的情况下,很难说您究竟可以使用什么。

最新更新