0

如果我在驱动程序文件的主文件中声明了 srand(2),是否需要在与驱动程序链接的代码文件中声明 srand(2)?

谢谢。

编辑

(来自以下用户的评论)

如果我做,

srand(2);
srand(2);

我会得到2号种子吗?或者是其他东西?

4

3 回答 3

2

srand (2) 将随机数生成器的种子设置为 2。使用相同的参数再次调用它会将种子再次设置为 2,并将导致随机生成器创建相同的输出。

仅供参考,如果驱动程序使用它自己的 srand 副本(即它是一个 DLL),它可能不会影响主可执行文件中使用的随机生成器。

于 2008-11-28T20:31:04.547 回答
1

我认为您必须进一步澄清您的问题,但总的来说,您必须声明(但不定义)您在给定翻译单元中使用的每个函数。如果要在 .cpp 文件中使用 srand,则必须#include <stdlib.h>在该文件中使用。

有关 srand 的用法,请查看其文档。您通常只需要在给定进程中调用它一次,之后您可以期望每次运行相同的伪随机值序列。使用相同的种子再次调用它将重新启动值序列。如果您每次运行都需要不同的值,请尝试使用当前时间播种。

编辑:

你的意思是你有两个像这样的文件:

// Driver.cpp
#include <stdlib.h>
#include "otherfile.h"

int main()
{
    srand(2);
    Somefunc();
}

然后另一个文件链接在:

// OtherFile.cpp
#include <stdlib.h>
#include "otherfile.h"

void SomeFunc()
{
    // You don't need to call srand() here, since it's already been called in driver.cpp
   int j = rand();
}
于 2008-11-28T20:16:06.310 回答
0

当您使用特定种子调用 srand() 时,它会开始该种子的序列,而不管之前对 srand() 的任何调用。例如,每次您调用 srand(2) 时,对 rand() 的后续调用每次都会以相同的顺序为您提供相同的数字。所以:

srand(2);
srand(2);

是多余的。这个链接对 srand 有很好的描述。

于 2009-08-27T19:24:18.843 回答