Re: Гарантии sizeof(char, short, int, long)
От: igna Россия  
Дата: 24.10.05 13:38
Оценка:

"Очевидно, что типы char и long double имеют разные размеры, однако это не гарантируется стандартом."


(Андрей Александреску, Современное проектирование на C++)
Re[8]: Гарантии sizeof(char, short, int, long)
От: elcste  
Дата: 24.10.05 14:35
Оценка: 12 (1)
Здравствуйте, Аноним, Вы писали:

E>>А вот это темный вопрос. ISO/IEC 14882:2003 уже содержит в 1.2/1 ссылку на ISO/IEC 9899:1999. Правда Standard C Library по-прежнему определяется (в 1.2/2) как то, что описано в clause 7 ISO/IEC 9899:1990. С другой стороны, Numerical limits хоть и содержатся в библиотечном <limits.h>, но описаны вовсе не в "библиотечном" clause 7...


А>А где в стандарте С++ (кроме 1.2/ххх) содержится ссылка на стандарт С (в отношении размеров типов) и означает ли ссылка на стандарт С в 1.2/ххх что требования стандарта С для типов также должны выполняться для С++ ?


Ну, если хотите, в стандарте C++ явно сказано в 18.2.2, что в заголовке <climits> должны быть определены соответствующие константы. Там же даны ссылки на ISO C subclause 7.1.5, 5.2.4.2.2, 5.2.4.2.1. Статус этих ссылок разъясняется в 17.3.1.4 следующим образом:

Paragraphs labelled ‘‘SEE ALSO:’’ contain cross-references to the relevant portions of this Standard and the ISO C standard, which is incorporated into this Standard by reference.

Re: Гарантии sizeof(char, short, int, long)
От: ruslan_abdikeev Россия http://aruslan.nm.ru
Дата: 24.10.05 21:57
Оценка: 3 (1)
Здравствуйте, Ignoramus, Вы писали:

I>Читаю у Страуструпа (Язык программирования С++, спец. Издание), раздел 4.6. Размеры, стр. 113:

По поводу размеров фундаментальных типов гарантируется следующее:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
Кроме того гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short – по меньшей мере 16 бит и для long – по меньшей мере 32 бита


I>Так все-таки гарантируется (выделенное) или нет?

Да, гарантируется.
Просто в силу гарантированных диапазонов.
Скажем, для int — это минимум 16 бит, поскольку требуется представить диапазон -32767..+32767, и так для всех типов.

C++2003 18.2.2/1 (отсылка в C90 limits.h)
C++2003 3.9.1/2 (сноска 39)
C90/C99 5.2.4.2.1/1: (см. все интересующие Вас типы)

— minimum value for an object of type int
INT_MIN -32767 // -(2^15 — 1)
— maximum value for an object of type int
INT_MAX +32767 // 2^15 — 1
— maximum value for an object of type unsigned int
UINT_MAX 65535 // 2^16 — 1

C++2003 3.9.1/3:
"each signed integer type has the same object representation as its corresponding unsigned integer type."

Ссылки на стандарты — http://www.livejournal.com/users/aruslan/44635.html
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.