如何解决rand函数可以在多个翻译单元上工作吗?
如果我在srand
函数中调用main
,是否还会影响其他翻译单元中函数的结果?
解决方法
glibc的源代码中的一些小信息。
srand
是__srandom
的弱别名。 (Source)。
__srandom
呼叫__srandom_r
(Source)。
__srandom_r
只是基于种子来更新传递给它的struct random_data
。
(Source)
rand(void)
只是在呼叫__random
。 (Source)。
__random
调用__random_r
,传递与传递到__srandom_r
的结构相同的结构。 (Source)。
__random_r
然后从传递的结构中生成一个随机值。 (Source)。
因此,简而言之,在程序运行时,对主函数srand
的调用会影响其他每个函数的随机数,因为状态在所有函数之间共享。 / p>
C个翻译单元限制了在其中声明的某些标识符的范围,但不适用于属于程序的任何实际功能或对象。因此,就不同的TU而言,程序状态不能特定于TU。
然后,具体来说,在仅执行定义行为的程序的任何特定线程中,通过srand()
设置的随机数种子在一个TU中的编码看上去都不会与同时在一个TU中进行编码的样子不同。不同的TU。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。