srand 函数是否适用于多个翻译单元?
Does the srand function work over multiple translation units?
如果我在我的 main
函数中调用 srand
,它是否也会影响我在其他翻译单元中的函数的结果?
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).
因此,简而言之,在您的 main-function 中调用 srand
将影响所有其他函数中的随机数,而您的程序运行时,因为状态是共享的所有功能。
C 翻译单元限制了在其中声明的某些 标识符 的范围,但不限制属于程序的任何实际函数或对象。因此,程序状态不能是 TU-specific,因为它因不同的 TU 而不同。
那么,具体来说,在程序的任何特定线程中,仅执行定义的行为,通过 srand()
设置的随机数种子在一个 TU 中的代码与同时在代码中的代码不会有所不同在不同的 TU 中。
如果我在我的 main
函数中调用 srand
,它是否也会影响我在其他翻译单元中的函数的结果?
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).
因此,简而言之,在您的 main-function 中调用 srand
将影响所有其他函数中的随机数,而您的程序运行时,因为状态是共享的所有功能。
C 翻译单元限制了在其中声明的某些 标识符 的范围,但不限制属于程序的任何实际函数或对象。因此,程序状态不能是 TU-specific,因为它因不同的 TU 而不同。
那么,具体来说,在程序的任何特定线程中,仅执行定义的行为,通过 srand()
设置的随机数种子在一个 TU 中的代码与同时在代码中的代码不会有所不同在不同的 TU 中。