将未初始化的变量传递给 srand 是个好主意吗?

2023-12-13

将未初始化的变量传递给是个好主意吗srand而不是结果time(NULL)?
这是一个#include并减少一个函数调用。

示例代码:

#include <stdlib.h>

int main(void) {
    {
        usigned seed; //uninitialized
        srand(seed);
    }
    //other code
    return 0;
}

代替

#include <stdlib.h>
#include <time.h>

int main(void) {
    srand(time(NULL));
    //other code
    return 0;
}

不,不是。

读取未初始化的值会导致未定义的行为。它可以是零,也可以是半随机的——但因此,它可以重复是相同的值。它还可能导致编译或运行时错误,或执行任何其他完全不可预测的事情。

然后,编译您的程序的其他人会注意到编译器关于未初始化值的警告并尝试修复它。他可以正确地修复它,或者给定足够复杂的程序,他可以将其初始化为零。这就是如何“小”错误变成大错误.


只需尝试您的片段srand()取而代之printf():

#include <stdio.h>

int main()
{
    {
        unsigned seed;
        printf("%u\n", seed);
    }

    return 0;
}

在我的系统上它反复给出0。这意味着至少有一个系统您的代码被破坏了:)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将未初始化的变量传递给 srand 是个好主意吗? 的相关文章

随机推荐