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

时间:2013-08-31 22:38:35

标签: c simulation

我想用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,{{对于可以用这些值形成的所有9种组合,1}}取值25 ......等等。如果我不需要手动操作并且每次模拟完成时更改组合,我更愿意。有没有办法可以列出某种形式的所有组合(我要求建议使用这种组合的数据结构),然后让代码一次读取一个。这就是我如何在运行时设置参数的值。

也许没有一种方法可以做到这一点。但我很感激您认为这是一种很好的方式。

如果您需要进一步说明,请与我们联系。

感谢您阅读本文并获得答案。

2 个答案:

答案 0 :(得分:3)

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

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);
  }
}

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

答案 1 :(得分:0)

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

例如,