gcc, ширина long int на разных архитектурах - PullRequest
5 голосов
/ 22 ноября 2010

На 64-битных архитектурах long int, согласно gcc, составляет не менее int64_t. На 32-битном long int - это минимум int32_t. В компиляторах Microsoft long всегда равно int32_t, независимо от 32/64-битного. Есть ли способ:

  1. Принудительно ли обрабатывать gcc как int64_t на 32-битной версии? (для удобства тестирования)
  2. Принудительно ли обрабатывать gcc как int32_t на 64-битной версии? (для соответствия компилятору MS).

Ответы [ 2 ]

14 голосов
/ 22 ноября 2010

Не делайте этого - используйте стандартные типы, такие как int32_t, uint32_t, int64_t, uint64_t и т. Д. Из <stdint.h>, вместо того, чтобы пытаться делать предположения об обнаженных типах, таких как long int или пытаясь склонить компилятор к вашей воле.

Примечание: 64-битная модель для любой данной платформы (например, LP64 для большинства * nix-платформ, Mac OS X и т. Д.) - это данность, поэтому даже если вы можете убедить компилятор использовать другую 64-битную модель, вы вероятно, прервет любые вызовы системного кода, библиотек и т. д.

0 голосов
/ 22 ноября 2010

Вот почему обычно гораздо проще использовать набор typedef, определенных для каждой платформы.Это действительно избавит вас от лишних хлопот при компиляции на random-platform-with-random-compiler-47.4

...