Символ, как гарантируют, будет точно 8-разрядным долго? [дубликат]

Как я помню из чтения Framework Design Guidelines , на самом деле не существует установленного соглашения для частных переменных-членов, за исключением того, что не следует использовать венгерскую нотацию и не следует использовать заглавную букву первой буквы имени переменной ( использовать верблюжий корпус). В книге есть цитаты, которые поддерживают оба ваших примера, а также вообще не используют префиксы.

Лично я предпочитаю префикс "m_".

59
задан Bakuriu 24 April 2014 в 08:14
поделиться

6 ответов

Из копия спецификации ANSI C , см. Раздел 3.1.2.5 - Типы :

Объект, объявленный как тип char, достаточно большой, чтобы вместить любой член базовый набор символов исполнения. Если член требуемого источника набор символов, перечисленный в $ 2.2.1, равен хранится в объекте char, его значение гарантированно будет положительным. Если другие количества хранятся в char объект, поведение определяется реализацией: значения рассматривается как подписанный или неотрицательные целые числа.

Концепция «набора символов выполнения» вводится в Раздел 2.2.1 - Наборы символов .

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

Теперь добавьте к этому раздел 2.2.4.2 - Числовые ограничения

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

Размеры интегральных типов

Приведенные ниже значения должны быть заменены постоянными выражениями подходит для использования в предварительной обработке #if директивы. Их значения, определенные реализацией, должны быть равный или больший по величине (абсолютное значение) к показанным, с тот же знак.

  • максимальное количество бит для наименьшего объект, который не является битовым полем (байт)
    CHAR_BIT 8

  • минимальное значение для объекта типа знаковый char
    SCHAR_MIN -127

  • максимальное значение для объекта типа знаковый символ
    SCHAR_MAX +127

  • максимальное значение для объекта типа unsigned char
    UCHAR_MAX 255

....

Итак, у вас есть это - количество бит в char должно быть не менее 8.

47
ответ дан 24 November 2019 в 18:30
поделиться

Нет, не гарантируется, что он будет 8-битным. sizeof (char) гарантированно равен 1, но это не обязательно означает один 8-битный байт.

12
ответ дан 24 November 2019 в 18:30
поделиться

нет, тип данных char должен содержать не менее 8 бит (см. Спецификацию ANSI C)

11
ответ дан 24 November 2019 в 18:30
поделиться

В проекте стандарта C99 говорится, что байт должен быть не менее 8-битной ширины, поскольку содержит макрос CHAR_BIT , который дает количество битов на байт, которое гарантированно должно быть не менее 8 (§5.2.4.2.1).

Черновик стандарта C ++ включает C под именем ] (§18.2.2).

7
ответ дан 24 November 2019 в 18:30
поделиться

Из стандарта C, описывающего limits.h (требуется некоторое переформатирование):

  1. количество бит для самый маленький объект это не битовое поле (байт): CHAR_BIT 8
  2. минимальное значение для объекта типа знаковый символ: SCHAR_MIN -127
  3. максимальное значение для объекта типа знаковый символ: SCHAR_MAX +127

Минимум 8 CHAR_BIT гарантирует, что ширина символа не менее 8 бит. Диапазоны SCHAR_MIN и SCHAR_MAX гарантируют, что представление подписанного char использует не менее восьми битов.

1
ответ дан 24 November 2019 в 18:30
поделиться

Первое, что я хотел бы сказать, это то, что если вам нужно, чтобы тип был точным числом битов, используйте тип определенного размера. В зависимости от вашей платформы он может варьироваться от __ s8 для 8-битного типа со знаком в Linux до __ int8 в VC ++ в Windows.

Теперь, согласно Роберту Лаву в его главе о переносимости в «Разработка ядра Linux» он заявляет, что стандарт C «оставляет размер стандартных типов на усмотрение реализаций, хотя он действительно требует минимального размера».

Затем в сноске внизу страницы он говорит: «За исключением char , который всегда 8 бит»

Я не уверен, на чем он это основывает, но может быть, это этот раздел из спецификации ANSI C ?

2.2.4. в этом разделе, который должен быть указан в заголовках limits.h и float.h

«Размеры целочисленных типов limits.h»

Приведенные ниже значения должны быть заменены постоянными выражениями подходит для использования в директивах предварительной обработки #if. Их значения, определенные реализацией, должны быть равны или больше по величине (абсолютное значение) показанным, с тем же знаком.

максимальное количество битов для наименьшего объекта, который не является битовым полем (байт)

CHAR_BIT 8

минимальное значение для объекта типа signed char

SCHAR_MIN -127

максимальное значение для объекта типа signed char

SCHAR_MAX +127

максимальное значение для объекта типа unsigned char

UCHAR_MAX 255

минимальное значение для объекта type char

CHAR_MIN см. ниже

максимальное значение для объекта типа char

CHAR_MAX см. ниже

максимальное количество байтов в многобайтовом символе,для любой поддерживаемой локали

MB_LEN_MAX 1

минимальное значение для объекта типа short int

SHRT_MIN -32767

максимальное значение для объекта типа short int

SHRT_MAX +32767

максимальное значение для объекта типа unsigned short int

USHRT_MAX 65535

минимальное значение для объекта типа int

INT_MIN -32767

максимальное значение для объекта типа int

INT_MAX +32767

максимальное значение для объекта типа unsigned int

UINT_MAX 65535

минимальное значение для объекта типа long int

LONG_MIN -2147483647

максимальное значение для объекта типа long int

LONG_MAX +2147483647

максимальное значение для объекта типа unsigned long int

ULONG_MAX 4294967295

Если значение объекта типа char sign-extends при использовании в

максимальное значение для объекта типа int

INT_MAX +32767

максимальное значение для объекта типа unsigned int

UINT_MAX 65535

минимальное значение для объекта типа long int

LONG_MIN -2147483647

максимальное значение для объекта типа long int

LONG_MAX +2147483647

максимальное значение для объекта типа unsigned long int

ULONG_MAX 4294967295

если значение объекта типа char знак-расширяется при использовании в

максимальное значение для объекта типа int

INT_MAX +32767

максимальное значение для объекта типа unsigned int

UINT_MAX 65535

минимальное значение для объекта типа long int

LONG_MIN -2147483647

максимальное значение для объекта типа long int

LONG_MAX +2147483647

максимальное значение для объекта типа unsigned long int

ULONG_MAX 4294967295

если значение объекта типа char знак-расширяется при использовании вобъекта типа char sign-extends при использовании вобъекта типа char sign-extends при использовании в выражение, значение CHAR_MIN должно быть таким же, как у SCHAR_MIN и значение CHAR_MAX должны быть такими же, как у SCHAR_MAX. Если значение объекта типа char не sign-extend при использовании в выражении значение CHAR_MIN должно быть 0, а значение CHAR_MAX должно быть таким же, как и значение UCHAR_MAX ./7/

-2
ответ дан 24 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

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