uint8_t по сравнению с неподписанным символом

вина svn показывает Вам, какая регистрация изменила любую строку в файле в прошлый раз.

Это работает над старыми изменениями также.

216
задан Joachim Sauer 1 March 2010 в 08:55
поделиться

7 ответов

Он документирует ваше намерение - вы будете хранить маленькие числа, а не символы.

Также он выглядит лучше, если вы используете другие определения типов, такие как uint16_t или int32_t ].

212
ответ дан 23 November 2019 в 04:19
поделиться

Как вы сказали, « почти каждая система».

char , вероятно, будет изменяться с меньшей вероятностью, но как только вы начнете использовать uint16_t и друзья, использование uint8_t лучше смешивается и может даже быть частью стандарта кодирования.

7
ответ дан 23 November 2019 в 04:19
поделиться

Все дело в написании независимого от реализации кода. unsigned char не может быть 8-битным типом. uint8_t есть (если есть).

40
ответ дан 23 November 2019 в 04:19
поделиться

Чтобы быть педантичным, некоторые системы могут не иметь 8-битного типа. Согласно Википедия :

Требуется реализация для определения целочисленных типов точной ширины для N = 8, 16, 32 или 64 тогда и только тогда, когда он имеет какой-либо тип, отвечающий требованиям. Нет необходимости определять их для любого другого N, даже если он поддерживает соответствующие типы.

Таким образом, uint8_t не гарантируется, хотя он будет для всех платформ, где 8 бит = 1 байт . Некоторые встроенные платформы могут отличаться, но это случается очень редко. Некоторые системы могут определять типы char как 16-битные, и в этом случае, вероятно, не будет никакого 8-битного типа.

Кроме этой (незначительной) проблемы, @ Ответ Марка Рэнсома , на мой взгляд, лучший.

64
ответ дан 23 November 2019 в 04:19
поделиться

Там немного. С точки зрения переносимости, char не может быть меньше 8 бит, и ничто не может быть меньше, чем char , поэтому, если данная реализация C имеет 8-битный целочисленный тип без знака, он будет быть char . В качестве альтернативы, у него может не быть его вообще, и в этот момент любые уловки typedef станут спорными.

Его можно использовать для лучшего документирования вашего кода в том смысле, что вам ясно, что вам нужны 8-битные байты там и больше ничего. Но на практике это разумное ожидание уже практически везде (есть платформы DSP, на которых это не так, но шансы на то, что ваш код там запущен, невелики, и вы можете с тем же успехом выполнить ошибку, используя статическое утверждение в верхней части вашей программы на такую ​​платформу).

6
ответ дан 23 November 2019 в 04:19
поделиться

Практически в каждой системе я встречал uint8_t == unsigned char, но это не гарантируется стандартом C. Если вы пытаетесь написать переносимый код и важно, какой именно размер памяти, используйте uint8_t. В противном случае используйте символ без знака.

2
ответ дан 23 November 2019 в 04:19
поделиться

Это действительно важно, например, когда вы пишете сетевой анализатор. Заголовки пакетов определяются спецификацией протокола, а не тем, как работает компилятор C конкретной платформы.

4
ответ дан 23 November 2019 в 04:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: