我试图使用rand()
生成一些随机数,但由于要生成一些大数,因此我首先检查了RAND_MAX。在Windows 10中,printf("%x",RAND_MAX);
给出了0x7fff
,而在Linux 18.04上,printf("%x",RAND_MAX);
得到了0x7ffffff
为什么当我在同一台计算机上将相同的编译器GCC与相同的库一起使用时,最大范围发生变化?
有没有办法在Windows上配置我的IDE(代码块)或编译器以使其与Linux上的大小相同?
答案 0 :(得分:2)
它不是相同的库。 Linux通过大多数Linux程序使用的公用 "methodId": {
"className": "InvokerParser",
"filePath": "org/foo/commons/functors/InvokerParserformer.java",
"methodName": "parser"
}
(通常为rand
)提供libc
。 Windows提供了一个不同的“通用” C运行时,许多编译器和工具都捆绑了自己的版本。
glibc
is pretty Linux specific;您可以始终遵循Linux约定编写自己的glibc
/ srand
/ rand
替换库,但不能只使用未修改的Linux。
如果您想要可移植的代码,建议您切换到C ++并使用具有明确定义的可移植语义的C ++ 11 RAND_MAX
API。 <random>
是一个糟糕的PRNG,努力使其可移植并不能解决问题。