如果我在我的驱动文件的主文件中声明了srand(2), 我是否需要在与我的驱动程序链接的代码文件中声明srand(2)?
感谢。
修改
(来自下方的用户评论)
如果我这样做,
srand(2);
srand(2);
我会把种子当作2吗?或其他什么?
答案 0 :(得分:2)
srand(2)将随机数生成器的种子设置为2.使用相同参数再次调用它再次将种子设置为2,并使随机生成器创建相同的输出。
仅供参考,如果驱动程序使用它自己的srand副本(即它是一个DLL),它可能不会影响主可执行文件中使用的随机生成器。
答案 1 :(得分:1)
我认为你必须更多地澄清你的问题,但一般来说,你必须声明(但不是定义)你在给定翻译单元中使用的每个函数。如果要在.cpp文件中使用srand,则必须在该文件中使用#include <stdlib.h>
。
对于srand的使用 - 看一下它的documentation。您通常只需要在给定的进程中调用一次,之后您可以期望每次运行相同的伪随机值序列。使用相同的种子再次调用它将重新启动值序列。如果您想要每次运行不同的值,请尝试使用当前时间播种。
编辑:
你的意思是你有两个这样的文件:
// 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();
}
答案 2 :(得分:0)
当您使用特定种子调用srand()时,无论先前对srand()的调用如何,它都会开始该种子的序列。例如,每次调用srand(2)时,对rand()的后续调用每次都会以相同的顺序给出相同的数字。所以:
srand(2);
srand(2);
是多余的。 This link对srand有很好的描述。