2012-04-15 3 views
4

Я пишу программу для хранения данных в файл на блоке каждые 32 бита (т. Е. 4 байта за раз). Я написал код в 64-битной системе Windows, но использую компилятор 32 бита (mingw32). В текущей системе размер int long одинаковый, 32 бит (4 байта). В настоящее время я переношу код на другие системы, перекомпилируя с g ++ (без изменения кода). Однако я обнаружил, что размер int или long различен и зависит от системы. Так или иначе (например, использование макроса в файле заголовка), чтобы определить размер целого числа, чтобы решить, следует ли использовать int или long в качестве типа данных в коде? Я должен перекомпилировать код в 4 разных типах систем, это действительно головная боль, если я модифицирую код, чтобы иметь 4 разных копии для каждой системы.динамически определяет тип целого числа на основе системы (C++)

ответ

10

Что вы хотите сделать, это использовать стандартные типы, такие как int32_t. Этот тип всегда 32 бит. В настоящее время я использую эти типы в переносной базе данных (berkeley db) для совместимости между системами.

См. here для всех них.

Включите stdint.h, чтобы получить эти определения.

+0

Спасибо много. Я думаю, что это то, что я ищу :) – user1285419

2

Вы можете использовать sizeof (int) для определения размера целого числа.

Если вам нужен конкретный размер, то вы должны использовать int32_t (или int64_t) от stdint.h

3

Это общая проблема с каноническим решением является C99.

The <stdint.h> header определяет набор типов, которые обеспечивают целые числа конкретных размеров, самых быстрых размеров и минимальных размеров. Это очень полезно при решении именно вашей проблемы.

Хорошо, что вы используете mingw32, потому что, к сожалению, в последний раз, когда я проверял, Microsoft не предоставляла stdint.h своим API. Если кому-то это нужно для Windows, есть версия с открытым исходным кодом, см: http://code.google.com/p/msinttypes/

0

ИМ лучший подход к этой проблеме, чтобы не использовать int, long long и т.д., но вместо независимых от платформы псевдонимов типа: int8_t , int16_t, int32_t, int64_t и т.д.

Они определены в <stdint.h>

Смежные вопросы