вина svn показывает Вам, какая регистрация изменила любую строку в файле в прошлый раз.
Это работает над старыми изменениями также.
Он документирует ваше намерение - вы будете хранить маленькие числа, а не символы.
Также он выглядит лучше, если вы используете другие определения типов, такие как uint16_t
или int32_t
].
Как вы сказали, « почти каждая система».
char
, вероятно, будет изменяться с меньшей вероятностью, но как только вы начнете использовать uint16_t
и друзья, использование uint8_t
лучше смешивается и может даже быть частью стандарта кодирования.
Все дело в написании независимого от реализации кода. unsigned char
не может быть 8-битным типом. uint8_t
есть (если есть).
Чтобы быть педантичным, некоторые системы могут не иметь 8-битного типа. Согласно Википедия :
Требуется реализация для определения целочисленных типов точной ширины для N = 8, 16, 32 или 64 тогда и только тогда, когда он имеет какой-либо тип, отвечающий требованиям. Нет необходимости определять их для любого другого N, даже если он поддерживает соответствующие типы.
Таким образом, uint8_t
не гарантируется, хотя он будет для всех платформ, где 8 бит = 1 байт . Некоторые встроенные платформы могут отличаться, но это случается очень редко. Некоторые системы могут определять типы char
как 16-битные, и в этом случае, вероятно, не будет никакого 8-битного типа.
Кроме этой (незначительной) проблемы, @ Ответ Марка Рэнсома , на мой взгляд, лучший.
Там немного. С точки зрения переносимости, char
не может быть меньше 8 бит, и ничто не может быть меньше, чем char
, поэтому, если данная реализация C имеет 8-битный целочисленный тип без знака, он будет быть char
. В качестве альтернативы, у него может не быть его вообще, и в этот момент любые уловки typedef
станут спорными.
Его можно использовать для лучшего документирования вашего кода в том смысле, что вам ясно, что вам нужны 8-битные байты там и больше ничего. Но на практике это разумное ожидание уже практически везде (есть платформы DSP, на которых это не так, но шансы на то, что ваш код там запущен, невелики, и вы можете с тем же успехом выполнить ошибку, используя статическое утверждение в верхней части вашей программы на такую платформу).
Практически в каждой системе я встречал uint8_t == unsigned char, но это не гарантируется стандартом C. Если вы пытаетесь написать переносимый код и важно, какой именно размер памяти, используйте uint8_t. В противном случае используйте символ без знака.
Это действительно важно, например, когда вы пишете сетевой анализатор. Заголовки пакетов определяются спецификацией протокола, а не тем, как работает компилятор C конкретной платформы.