MinGW предназначен для создания приложений Windows, а платформа Microsoft ABI указывает , что int
и long
имеют одинаковый размер 32 бита.Если MinGW определит long
не так, как MSVC, большинство существующих приложений Windows, использующих long
, сломаются при компиляции с использованием MinGW.
Сказав, что Cygwin x86_64 действительно следует соглашению LP64 поWindows, как и в Linux ( source ).
Таким образом, вы можете использовать это для создания приложения Windows, где размер long
равен 8 байтам:)
Контрольный пример:
#include <stdio.h>
#include <windows.h>
int CALLBACK WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
char buf[100];
snprintf(buf, sizeof(buf),
"sizeof(int)=%d, sizeof(long)=%d, sizeof(long long)=%d\n",
sizeof(int), sizeof(long), sizeof(long long));
MessageBox(NULL, buf, "Cygwin Test", MB_OK);
return 0;
}
Скомпилировать с: C:\cygwin64\bin\gcc.exe -mwindows -m64 cygwin-test.c -o cygwin-test
Выход: