LINUX.ORG.RU

typedef кщк еще

typedef ответ "Прочитать книгу по С"

fura13 ★★★
()

>Нужен тип данных - 6 байт

так строго? а без разницы какие данные в этих 6 байтах будут хранится? =) а так sizeof в помощь.

ale ★★
()
Ответ на: комментарий от dilmah

dilmah:

> ...просто этот 1 не обязан быть байтом

Пошла терминология...

Под байтом я понимал то, sizeof от чего равен 1. Просто не всегда в байте 8 бит.

Die-Hard ★★★★★
()
Ответ на: комментарий от dilmah

Приведите пример компилятора, в котором размер char (в битах) отличается от размера одного байта, состоящего из 8-и бит?

bbk123 ★★★★★
()
Ответ на: комментарий от Begemoth

sizeof(char) всегда равен 1 по стандарту, это из определения sizeof(). Другое дело, что константа CHAR_BIT не обязательно равна 8.

Motl
()
Ответ на: комментарий от bbk123

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

Я с ними не сталкивался. Я знаю что они есть. Времени искать ссылки у меня нет. 9-битный чар в компиляторах на машинах Unisys

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

> во первых, какая разница есть такие компиляторы или нет.

Ты сказал, что они "стопудово есть". Раз стопудово есть, то их
стопудово можно назвать, не так ли?

> Стандарт это разрешает, значит они могут быть.

Смотря о каком стандарте идёт речь. POSIX это явно запрещает.
Вот что говорит ISO/IEC 9899:1999

  7.18.1.1 Exact-width integer types
1 The typedef name intN_t designates a signed integer type with width N , no padding
  bits, and a two's complement representation. Thus, int8_t denotes a signed integer
  type with a width of exactly 8 bits.
2 The typedef name uintN_t designates an unsigned integer type with width N . Thus,
  uint24_t denotes an unsigned integer type with a width of exactly 24 bits.
3 These types are optional. However, if an implementation provides integer types with
  widths of 8, 16, 32, or 64 bits, it shall define the corresponding typedef names.

А уже в IEEE Std 1003.1 говорится, что int8_t и uint8_t обязательны
и должны определяться через typedef:

http://opengroup.org/onlinepubs/009695399/basedefs/stdint.h.html

Следовательно в любой POSIX системе CHAR_BIT всегда равен 8.

bbk123 ★★★★★
()
Ответ на: комментарий от cvv

Я знаю. Но даже среди не-POSIX систем CHAR_BITS>8 - большая редкость. CHAR_BITS диктуется минимальной разрядностью регистров процессора, тоесть длиной байта для данной архитектуры.

bbk123 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.