我正在尝试将一些代码从 linux 移植到 cygwin 下的 windows。我发现这个奇怪的错误,其中“rand_r 未在此范围内声明”。我将 gcc 4.8.1 用作 x86_64-w64-mingw32 并且在它的搜索路径(-v 选项)中它确实在正确的目录中查找。头文件已正确包含。我正在寻找解决这个问题的想法。是否有关于 cygwin 的一些事实我遗漏了,因此遇到了这个问题?有没有办法检查 gcc 是否确实接触了所需的文件?
最佳答案
与标准的 rand
函数相比,rand_r
函数被认为是线程安全的。参见 man 3 rand_r .
一种选择是通过封装对rand
的调用来自己实现rand_r
。这可能是理想的,也可能不是理想的,并且正如手册所述,rand_r
无论如何都是一个相当弱的伪随机数生成器。
既然您正在使用 C++,为什么不看看新的 random number libraries可用的。它们是线程安全的、可移植的,并且会产生更好的随机结果。 This question ,虽然不是真正的问题,但仍然包含一些有关如何使用该库的有用信息。
如果您没有可用的 C++11 随机类,Boost 也有一个 implementation .
关于c++ - rand_r 不在范围内,gcc mingw 在 Windows 上的 cygwin 下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454814/