Re[3]: char, signed char, unsigned char
От: N. I.  
Дата: 21.02.17 16:44
Оценка: 8 (1)
rg45:

R>Вот как раз C, в отличие от C++, не требует чтобы char был отдельным типом:


Всё ж-таки требует, но через одно место:

The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char. [Footnote: CHAR_MIN, defined in <limits.h>, will have one of the values 0 or SCHAR_MIN, and this can be used to distinguish the two options. Irrespective of the choice made, char is a separate type from the other two and is not compatible with either.]


Размещение такого уточнения в сноске похоже на нарушение регламента составления стандартов (если только из нормативной части не следует, что данные типы — непременно разные), но это обстоятельство вряд ли заставит кого-то трактовать стандарт C иначе.

Как следствие, вот такие варианты

ptrdiff_t char_ptr_diff(char *p1, signed char *p2)
{
    return p1 - p2;
}

ptrdiff_t char_ptr_diff(char *p1, unsigned char *p2)
{
    return p1 - p2;
}

по-любому являются ошибочными и для обоих требуется выдача компилятором какого-нибудь diagnostic message из-за нарушения constraints.
Отредактировано 21.02.2017 19:21 N. I. . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.