windows 像在 32 位机器中一样使用 long int 而在 64 位机器中
windows uses long int as if in a 32-bit machine while in 64-bit
我使用的是 10 64 位。
例如,当 运行 以下代码出现溢出并打印负数时,而在 linux 64 位机器上,我打印的是实际数字:
#include <stdio.h>
int main() {
long int a = 3845354610;
printf("Hello, World!%ld\n", a);
scanf("%ld", &a);
return 0;
}
windows 上的输出是:
Hello, World!-449612686
在 linux 上它是正确的输出。
我尝试在 CLion 的 CMake 选项中使用 --build-64bit
标志。我正在使用 mingw-64 (D:\MinGW\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64
).
我试过用cmd编译:
gcc -Wall -Wextra -Wvla -std=c99 main.c -o ma.exe
但输出是一样的。如何解决?
How can this be fixed?
通过使用 long long
或 std::int64_t
。 long
需要/保证至少为 32 位,这就是(64 位)windows.
上 long
的大小
我使用的是 10 64 位。 例如,当 运行 以下代码出现溢出并打印负数时,而在 linux 64 位机器上,我打印的是实际数字:
#include <stdio.h>
int main() {
long int a = 3845354610;
printf("Hello, World!%ld\n", a);
scanf("%ld", &a);
return 0;
}
windows 上的输出是:
Hello, World!-449612686
在 linux 上它是正确的输出。
我尝试在 CLion 的 CMake 选项中使用 --build-64bit
标志。我正在使用 mingw-64 (D:\MinGW\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64
).
我试过用cmd编译:
gcc -Wall -Wextra -Wvla -std=c99 main.c -o ma.exe
但输出是一样的。如何解决?
How can this be fixed?
通过使用 long long
或 std::int64_t
。 long
需要/保证至少为 32 位,这就是(64 位)windows.
long
的大小