首页 > 解决方案 > srand 函数是否适用于多个翻译单元?

问题描述

如果我调用srand我的main函数,它是否也会影响我在其他翻译单元中的函数的结果?

标签: crandomsrand

解决方案


来自glibc源代码的一些小资料。

srand是 的弱别名__srandom。(来源)。

__srandom调用__srandom_r来源)。

__srandom_r只是struct random_data根据种子更新传递给它的内容。(来源

rand(void)只是打电话__random。(来源)。

__random调用__random_r,传递相同的结构,传递给__srandom_r. (来源)。

__random_r然后从传递的结构中生成一个随机值。(来源)。

因此,简而言之,srand在您的主函数中调用将影响每个其他函数中的随机数,而您的程序运行时,因为状态在所有函数之间共享。


推荐阅读