Гарантии на sizeof (int) в Single UNIX или POSIX - PullRequest
6 голосов
/ 26 декабря 2010

Каков размер гарантии на int в Single UNIX или POSIX? Это, конечно, часто задаваемые вопросы, но я не могу найти ответ ...

Ответы [ 3 ]

4 голосов
/ 26 декабря 2010

С ответом icecrime и дальнейшими поисками на моей стороне, я получил полную картину:

ANSI C и C99 оба требуют, чтобы INT_MAX был по крайней мере +32767 (т.е. 2 ^ 15-1). POSIX не идет дальше этого. Single Unix v1 имеет ту же гарантию, в то время как Single Unix v2 заявляет, что минимально допустимое значение составляет 2 147 483 647 (т.е. 2 ^ 31-1).

3 голосов
/ 26 декабря 2010

Стандарт C99 определяет содержание заголовка <limits.h> следующим образом:

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

  • минимальное значение для объекта типа int
    INT_MIN -32767 // - (2 15 - 1)
  • максимальное значение дляобъект типа int
    INT_MAX +32767 // 2 15 - 1
  • максимальное значение для объекта типа unsigned int
    UINT_MAX 65535 // 2 16 - 1

Для типа int не указано никаких требований к размеру.

Однако заголовок <stdint.h> предлагает дополнительное целочисленные типы точной ширины int8_t, int16_t, int32_t, int64_t и их беззнаковый аналог:

Имя typedef intN_t обозначает целочисленный тип со знаком ширинойN, нет дополнительных битов, и представление дополнения до двух.Таким образом, int8_t обозначает целочисленный тип со знаком с шириной ровно 8 бит .

0 голосов
/ 26 декабря 2010

POSIX не распространяется на это.Стандарт ISO C гарантирует, что типы будут способны обрабатывать по крайней мере определенный диапазон значений, но не будут иметь определенный размер.

Заголовок <stdint.h>, представленный в C99, предоставит вам доступ к таким типам, как int16_t, которые делают.

...