c - 处理数千个参数的参数设置操作

标签 c parameters

我正在编写一些代码,主要是为工业自动化设备执行设置操作。执行的设置基本上是在设备上单独设置成千上万个参数。

您可以将大部分代码视为一组例程,如下所示:

foo_set_x{
foo_param_1 = 1
foo_param_2 = 2
….
}

注意:以上是一个极其简化的例子

随着新项目的出现,一些参数会发生变化,而另一些则不会。因此,当客户使用此设置实用程序时,他们会回答有关使用哪个参数规范的问题。

现在一些例程变成这样:

foo_set_x{
IF param_spec_1 {
foo_param_1 = 1
….
}
IF param_spec_2 {
foo_param_1 = 2
….
}
}

一些例程变成这样:

foo_set_y{
IF param_spec_1 OR param_spec_2 {
foo_param_1 = 1
foo_param_2 = 2
….
}
}

因此,每次出现新的参数规范时,我都必须更改数百个例程中的代码以支持新规范。对我来说,这似乎不是解决这个问题的明智方法。

我能想到的唯一解决方案是为每个参数创建变量。然后我所有的例程都将参数设置为变量。不需要 IF 或 CASE 语句。

问题是,我没有骗你,将近 5,000 个不同的参数。由于我使用的是一种相当有限且原始的语言(不是 OOP,而是基于 C),因此每个变量都必须是全局的,并且会占用大量宝贵的空间。我什至无法理解如何创建包含大约 5,000 个变量的智能变量列表(减去结构或数组中有意义的变量)。

谢谢大家。

附言请随时编辑或建议更好的标签。我有点迷路了。

最佳答案

我会考虑两种方法:

一种是数据驱动方法,其中每个 param_spec 都有一个包含所有适当变量的结构(或数组)。你说这会占用很多空间,但它只能消耗代码(= ROM)空间,因为你的结构可以是常量。而且,作为交换,您可能会节省大量代码空间。

foo_set_x{
  foo_param_1 = param_specs[spec_index].foo_param_1;
}

另一种方法是伪 OO 方法。请记住,真正的程序员可以用任何语言编写 OO 代码!每个参数规范都为我们的每个 foo_set_xyzzy 例程定义了它自己的函数,然后 foo_set_x 只调用正确的函数。这样做的好处是可以将特定参数集的所有更改保存在一个地方。

ps1_foo_set_x() {   foo_param_1 = 1; }

ps2_foo_set_x() {   foo_param_1 = 2; }

void (*foo_set_x)(void);

void select_ps1 {  foo_set_x = ps1_foo_set_x; }

void select_ps2 {  foo_set_x = ps2_foo_set_x; }

...

foo_set_x();

关于c - 处理数千个参数的参数设置操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764612/

相关文章:

c - c中是否有固定大小为两个字节的浮点类型?

c - malloc 无法分配内存 + 不发出警告

python - 未知类型名称 'glp_long' (mac osx python, pyglpk)

angularjs - $http 获取带有表单的请求

Python - 函数参数值更改

c - 函数接收垃圾

ruby-on-rails - Rails 新闻过滤器 url seo

c - 复杂函数定义中的参数范围

C语言中的字符比较?

c - 在 [min,max] 范围内生成随机数