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 longstd::int64_tlong 需要/保证至少为 32 位,这就是(64 位)windows.

long 的大小