在本机构建中,以下代码会打印-1
。 编译为 WASM 并在 node.js 中运行,它会打印4294967295
。 为什么结果不同?
#include <iostream>
int main() {
unsigned F = 20;
long HB = 19; // both give -1 if this is `long long`
std::cout << HB-F << std::endl;
return 0;
}
这是g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
作为本机编译器并em++ 3.1.66 (1f519517284660f4b31ef9b7f921bf6ba66c4041)
用于 emscripten 编译为 WASM。
sizeof(unsigned) == sizeof(long)
在 WASM 中,就像在 Windows ABI 中一样,并且long HB
(与 大小相同int
)被提升为unsigned long
(在此平台上与 大小相同unsigned int
)。g++ 默认将代码转换为 64 位二进制。在这种情况下,
sizeof(unsigned) < sizeof(long)
和unsigned F
被提升为long int
。尝试调用 g++ 以
-m32
获取 WASM 结果。