Современная операционная система / компилятор, где int (в C) не 32 бит? - PullRequest
9 голосов
/ 03 декабря 2011

Вопрос на самом деле несколько шире.

Исходя из опыта последних 15 лет, в настоящее время я предполагаю, что размер типов следующий:

byte = 8 bit

short = 2 bytes

int = 4 bytes

long long = 8 bytes

Существует ли современная ОС, в которой это предположение может быть оспорено?

Ответы [ 5 ]

4 голосов
/ 03 декабря 2011

Независимо от того, существуют ли такие " современные " системы, вы должны static_assert отстаивать эти предположения в своем коде, чтобы, если ваш код был когда-либо перенесен на платформу, где это предположение неверно, человек, делающий это портирование будет немедленно оповещено о проблеме.

3 голосов
/ 03 декабря 2011

Стандарт преднамеренно расплывчат по этому вопросу, уточняя только:

  • C90: sizeof(short) <= sizeof(int) <= sizeof(long)

  • C99: sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Кроме того, C99 требует, чтобы значение int было как минимум 16-битным значением.

Кроме того, 'byte' не является типом данных C.

0 голосов
/ 04 декабря 2011

Вероятно, есть одно исключение.

long long = error

Я слышал, что есть проблемы со старыми компиляторами Microsoft C. Я видел некоторые обходные пути в исходном коде. Однако 32-разрядный оптимизирующий компилятор C / C ++ версии 16 (из Visual Studio 2010) действительно долго работает.

0 голосов
/ 03 декабря 2011

У вас довольно много платформ (особенно во встроенных), где это не так.Например, вы можете иметь 2-октетный символ.

0 голосов
/ 03 декабря 2011

Согласно это Unicos имеет значение int как 64-битное.Конечно, определение «современного» компилятора довольно расплывчато.Вы все еще можете купить Borland C ++ для MS DOS, и ваши int будут 16-битными, но разве это современно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...