Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Алексей1153 |
29.12.2010, 18:43
Сообщение
#11
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
ну я как обычно с костылями ))
Если это нужно применить на практике и это критично, то можно просто поставить проверку (для компилятора или в рантайме) - и данный метод надёжен и непобедим Сообщение отредактировал Алексей1153 - 29.12.2010, 18:45 |
|
|
|
|
panter_dsd |
29.12.2010, 23:30
Сообщение
#12
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3
|
Костыльный костыль. ИМХО, лучше сделать typedef int8 (16, 32, etc)
|
|
|
|
|
DEADHUNT |
30.12.2010, 22:20
Сообщение
#13
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2
|
Цитата(Litkevich Yuriy @ 29.12.2010, 11:39) Link AD, это требование стандарта: short - фиксированный размер int - в зависимости от платформы/компилятора long - фиксированный размер какая страница? насколько я помню стандартом гарантируется только что sizeof(char) == 1. |
|
|
|
|
Litkevich Yuriy |
30.12.2010, 22:47
Сообщение
#14
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(DEADHUNT @ 31.12.2010, 0:20) Link какая страница? сейчас я не скажу, но у трёх разных авторов, в том числе и Страустопа был пример по поводу двух платформ.Цитата(AD @ 29.12.2010, 17:37) Link Например, если байт будет не 8 бит, а меньше, то уже такое определение не подходит. да, как раз в примере речь и шла о "слове" (не в терминах Интел/мелкософт) - т.е. ширина шины данных. |
|
|
|
|
Алексей1153 |
31.12.2010, 17:39
Сообщение
#15
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2946 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34
|
Цитата(panter_dsd @ 30.12.2010, 1:30) Link Костыльный костыль. ИМХО, лучше сделать typedef int8 (16, 32, etc) можно. Когда такие типы есть и за ними строго закреплён стандарт. На что надеяться нельзя, впрочем ) |
|
|
|
|
Iron Bug |
1.1.2011, 15:16
Сообщение
#16
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12
|
во многих компиляторах определены типы int8 (16,32...). как правило, тип int равен ширине шины. но бывает (при стандарте x86-64 берётся тип основных регистров, используемых конкретной осью). однако, среди всего многообразия компиляторов я ещё не видела, чтобы short был бы не двухбайтовый. исключения - компиляторы для DSP процессоров, там просто все типы данных - long, ибо процессор так устроен, что не может работать с меньшей длиной, поэтому там типы - чистая формальность, там даже char длиной в два слова. вот там нужно самому следить, чтобы сравнения были корректны и там для этой цели реализованы специальные функции приведения для корректного отсечения мусора при сравнении данных, а длина всегда 4. но в остальных случаях компилятор будет проверять длину данных. сколько видела компилеров, для всех short - это 2 байта. ну а представление байтов зависит от проца.
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 26.12.2025, 13:16 |