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 中。