如果我在驱动程序文件的主文件中声明了 srand(2),是否需要在与驱动程序链接的代码文件中声明 srand(2)?
谢谢。
编辑
(来自以下用户的评论)
如果我做,
srand(2);
srand(2);
我会得到2号种子吗?或者是其他东西?
srand (2) 将随机数生成器的种子设置为 2。使用相同的参数再次调用它会将种子再次设置为 2,并将导致随机生成器创建相同的输出。
仅供参考,如果驱动程序使用它自己的 srand 副本(即它是一个 DLL),它可能不会影响主可执行文件中使用的随机生成器。
我认为您必须进一步澄清您的问题,但总的来说,您必须声明(但不定义)您在给定翻译单元中使用的每个函数。如果要在 .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();
}
当您使用特定种子调用 srand() 时,它会开始该种子的序列,而不管之前对 srand() 的任何调用。例如,每次您调用 srand(2) 时,对 rand() 的后续调用每次都会以相同的顺序为您提供相同的数字。所以:
srand(2);
srand(2);
是多余的。这个链接对 srand 有很好的描述。