c - 为什么 RAND_MAX 在 linux 和 windows 的同一台机器上不同?

标签 c linux gcc random std

我试图使用 rand() 生成一些随机数,但我首先检查了 RAND_MAX,因为我想生成一些大数。在 Windows 10 中 printf("%x",RAND_MAX); 给出 0x7fff 而在 linux 18.04 printf("%x",RAND_MAX);给出 0x7ffffff 为什么当我在同一台机器上使用具有相同库的相同编译器 GCC 时,最大范围会发生变化? 有没有一种方法可以在 Windows 上配置我的 IDE(代码块)或编译器以获得与在 Linux 上相同的大小?

最佳答案

这不是同一个库。 Linux 正在提供 rand通过公共(public) libc (通常为 glibc )被大多数 Linux 程序使用; Windows 提供了不同的“通用”C 运行时,许多编译器和工具捆绑了它们自己的版本。

glibc is pretty Linux specific ;你总是可以自己写srand/rand/RAND_MAX遵循 Linux 约定的替换库,但你不能只使用 Linux 的未修改的。

如果您想要可移植代码,我建议切换到 C++ 并使用 C++11 <random> API,具有定义明确、可移植的语义。 rand是一个糟糕的 PRNG,努力使其可移植并不能解决这个问题。

关于c - 为什么 RAND_MAX 在 linux 和 windows 的同一台机器上不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55698041/

相关文章:

c - strcpy() 只存储最后一个字符串

c++ - 在 Linux 中读取文件的最快方法?

c - 不同编译器解析命令行的不同段错误

EOF : behavior change; work-around? 上的 C++ istream tellg()/fail()

c - 如何使用 GCC/Clang 编译器了解/限制 C 程序中的静态堆栈大小?

c - 求一个平面上的 4 个点是否构成一个矩形?

创建两个由父进程管理的子进程

c - 从秒获取 UTC 时间

c++ - 在 *NIX 上定位 C/C++ 库中要链接的哪些方法

c - gcc 内联汇编程序定义字符串