【发布时间】:2013-08-31 22:38:34
【问题描述】:
我想用 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 种组合。如果我不必在每次模拟完成时手动更改组合,我会更喜欢。有没有一种方法可以以某种形式列出所有组合(我要求推荐用于此组合的数据结构),然后让代码一次读取一个。这就是我将如何在运行时设置参数的值。
也许没有一种方法可以做到这一点。但如果您认为这是一种好方法,我将不胜感激。
如果您需要任何进一步的说明,请告诉我。
感谢您阅读本文和您的回答。
【问题讨论】:
-
int numpeople = 10; int ids [numpeople];在 C99 和 C11 下完全有效。 -
Google C++ 风格指南建议不要对 const 值使用宏,它包含good reasons 的列表,单击左侧的箭头即可显示。
-
@verbose 即使我在 gcc 命令中指定 -std=c99 ,我也会收到错误
error: variably modified ‘ids’ at file scope。还有什么我应该做的。 @Douglas 感谢有关宏的链接。 -
啊,是的,你不能在文件范围内这样做。可变长度的大小必须在运行时知道,以便为它分配适当的内存量。由于文件中的任何内容都可以修改
numpeople,这意味着即使在运行时也无法知道ids[]的大小。
标签: c simulation