![](/img/trans.png)
[英]Extending ruby in C - how to specify default argument values to function?
[英]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.