Re: Гарантии sizeof(char, short, int, long)
От: crable США  
Дата: 24.10.05 06:25
Оценка:
Здравствуйте, Ignoramus, Вы писали:

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


I>

I>По поводу размеров фундаментальных типов гарантируется следующее:

I>1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
I>… [skipped]

I>Кроме того гарантируется, что для представления char используется по меньшей мере 8 бит, для представления short – по меньшей мере 16 бит и для long – по меньшей мере 32 бита


I>Конечно, Бьярн солидный авторитет в этих вопросах, но я перерыл весь стандарт и там насчет столь конкретного минимального размера в битах ничего не сказано. Лишь для char сказано что он должен быть достаточно большим чтобы уместить все необходимые для самого языка символы.


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


I>Я пишу переносимый класс, который осуществляет некоторые манипуляции с битами и зависит от размеров фундаментальных типов данной платформы. Однако мне нужно гарантировать, что у передаваемых на вход функций параметров (как раз!) char >= 8 бит, short >= 16 бит, long >= 32 бит. Могу ли я на это рассчитывать?


I>А если не могу, какой можно придумать портабельный код, который бы по-прежнему корректно работал?


I>Например, если мне нужно передать на вход не менее чем 32-битное целое, как мне лучше всего поступить? Пока в голову приходит std::bitset или void* + bitCount, но это мрачновато, очень уж не хочется отказываться от такой простой и удобной вещи как передача параметра long .


Может подойдут enum'ы? Для
enum e {a = 255};
размер целого которым он представлен >= 8 бит.
The last good thing written in C was Franz Schubert's Symphony No. 9.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.