繁体   English   中英

关于如何在C中指定参数值的建议

[英]A recommendation for how to specify parameter values in C

我想用C编写计算机仿真代码。我对C还是很陌生,主要有Python经验和Javascript经验。 我想就以下最佳做法提出一些建议。

计算机仿真基于许多参数。 指定这些参数值的最佳方法是什么? 应该将它们指定为变量,还是应该使用#define宏设置它们的值。

例如我可以

int numpeople = 100;

要么,

#define numpeople 100

哪种更好的做法,还是没关系? 模拟中某些阵列的长度取决于参数。 如果我使用变量方法指定参数值,则无法使用它指定长度数组。

例如,

// This is invalid.
int numpeople = 10;
int ids[numpeople];

在这种情况下,您能否说我别无选择,应该使用

#define numpeople 100
int ids[numpeople];

还是有另一种更好的方法。

最后,无论采用哪种方式定义参数,我都希望在一个位置列出参数的可能值,然后针对每个可能的值进行仿真。 也就是说,假设parameter1可以取值100、200、300,而parameter2可以取值5、25、50。

我想先运行模拟,其中parameter1取值为100, parameter2取值为5。然后,我要在parameter1取值为100的情况下运行它,而parameter2取值25的……等等,对于所有9个组合由这些值组成。 如果我不必手动进行并且每次模拟完成都更改组合时,我会比较喜欢。 有没有一种方法可以列出某种形式的所有组合(我要求为该组合使用的数据结构提供建议),然后一次读取一个代码。 这就是我在运行期间如何设置参数的值。

也许没有一种方法可以做到这一点。 但是,我希望您认为这是个好方法,可以通过任何一种方式来实现。

如果您需要任何进一步的说明,请告诉我。

感谢您阅读本文和您的回答。

如果您的仿真由许多值参数化,请考虑将这些值作为单个结构传递给仿真设置。 像这样:

struct Params {
  int num_people;
  int simulation_steps;
  int step_size;
  // ...
}

void your_simulation(const &Params params) {
  int people_ids[params.num_people];
  // ...
}

这样,您可以在头文件,主文件或其他文件中设置多个运行。

Params small_sim = {
  .num_people = 10,
  .simulation_steps = 5,
  .step_size = 30,
};

Params big_sim = {
  .num_people = 100,
  .simulation_steps = 5000,
  .step_size = 3,
};

main() {

  if (...) {
    your_simulation(&small_sim);
  } else {
    your_simulation(&big_sim);
  }
}

这将使单元测试更加容易,因为您可以设置具有已知预期输出的固定仿真,也可以稍后扩展该程序以从输入文件,命令行或其他地方获取其参数。

您还可以将参数值作为命令行参数传递给程序。

例如

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM