Стандартные размеры байтов для переменных в C?

Итак, я писал о реализации старого алгоритма SHA1 в C (я знаю, что он небезопасен, он предназначен для задач Матасано), и для некоторых переменных очень важно, чтобы они имели длину 32 бита. Прочитав это unsigned long int 32 бита по стандарту, я просто использовал это, а затем потратил 4 часа, пытаясь выяснить, почему, черт возьми, мои хэши выходили совершенно неправильно, пока я не подумал посмотреть sizeof(unsigned long int) вышел, чтобы быть. Спойлер, это было 64.

Сейчас конечно пользуюсь uint32_tи так будет всегда в будущем, но может ли кто-то (предпочтительно тот, кто обладает большей осмотрительностью и меньшей доверчивостью, чем я) указать мне, где записаны фактические стандарты для переменных величин для современного C? Или скажите, почему этот вопрос ошибочен, если это так?

1 ответ

Решение

Минимальные размеры:

  • char - 8 бит
  • short - 16 бит
  • int - 16 бит
  • long - 32-разрядный
  • long long - 64-разрядный

Максимальных размеров не существует, автор компилятора выбирает все, что, по его мнению, будет работать лучше для целевой платформы. Соответствующие типы без знака имеют одинаковый минимальный размер.

Другие вопросы по тегам