Подтвердить что ты не робот

Uint32_t vs int как соглашение для повседневного программирования

Когда следует использовать типы данных из stdint.h? Правильно ли всегда использовать их в качестве конвенции? Какова была цель дизайна неспецифических типов размеров, таких как int и short?

4b9b3361

Ответ 1

Когда следует использовать типы данных из stdint.h?

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

Правильно ли всегда использовать в качестве условного обозначения их (тогда)?

Вещи склоняются таким образом. Типы фиксированной ширины являются более поздним дополнением к C. Original C имеет char, short, int, long, и это было прогрессивным, поскольку он пытался, не будучи слишком специфичным, для размещения различных целочисленных размеров, доступных в самых разных процессорах и средах. Поскольку C 40-летний возраст, он говорит об успешности этой стратегии. Много кода C было написано и успешно справляется с размером спецификации мягкого целочисленного размера. С ростом потребностей в согласованности char, short, int, long and long long недостаточно (или, по крайней мере, не так просто), и поэтому int8_t, int16_t, int32_t, int64_t рождаются. Новые языки, как правило, требуют особого фиксированного целочисленного размера и 2 дополнения. Поскольку они успешно, то дарвиновское давление будет надавливать на C. Мой хрустальный шар говорит, что мы увидим медленную миграцию на все более широкое использование типов фиксированной ширины в C.

Какова была цель дизайна неспецифических типов размеров, таких как int и short?

Это был хороший первый шаг для размещения широкого спектра различных целых ширин (8,9,12,18,36 и т.д.) и кодировок (2, 1, знак /mag ). Так много кодирования сегодня использует целые числа размера 2 из 2 с двумя дополнениями, что невозможно понять, что многие другие механизмы существовали заранее. См. Этот ответ.

Ответ 2

Моя работа требует, чтобы я использовал их, и я действительно люблю их использовать.

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

Если мне нужно использовать порядковый номер, который нужно увеличить, я бы не использовал int, потому что порядковые номера не должны быть отрицательными. Вместо этого я использую uint32_t. Поэтому я узнаю пространство порядкового номера и может соответствующим образом планировать/кодировать.

Код, который мы пишем, будет работать как на 32, так и на 64-битной машине, поэтому использование "int" на разных бит-машинах приводит к тонким ошибкам, которые могут быть болью для идентификации. Использование unint16_t будет выделять 16 бит в 32 или 64-битной архитектуре.

Ответ 3

Нет, я бы сказал, что никогда не рекомендуется использовать их для программирования общего назначения.

Если вы действительно заботитесь о количестве бит, тогда идите и используйте их, но для наиболее общего использования вам все равно, а затем используйте общие типы. Общие типы могут быть быстрее, и их, безусловно, легче читать и писать.

Ответ 4

Типы данных с фиксированной шириной должны использоваться только тогда, когда это действительно необходимо (например, при реализации протоколов передачи или доступа к аппаратным средствам или требующих определенного диапазона значений (здесь вы должны использовать вариант ..._least_...)). Ваша программа не будет адаптироваться еще в измененных средах (например, использование uint32_t для файлов может быть в порядке 10 лет назад, но off_t будет соответствовать последним потребностям). Как указывали другие, может быть влияние производительности, поскольку int может быть быстрее, чем uint32_t на 16-разрядных платформах.

int сам по себе очень проблематичен из-за его подписанности; лучше использовать, например, size_t, когда переменная содержит результат strlen() или sizeof().