![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что подумает об этом компилятор?
NL © (2007-09-18 00:13:00)Всем привет!
SizeOf(2) - выделит 1, 2 или 4 байта? И чем он (компилятор) будет руководствоваться?
Anatoly Podgoretsky (2007-09-18 13:32:00) [1]
> Значит для sizeof(2) вернёт sizeof(T), где type T=0..127
Не имеет практического смысла.
Anatoly Podgoretsky (2007-09-18 13:31:00) [2]
> Но есть у меня ощущение, что константа 2 типа shortint.
> Посему 1.
Byte := 1;
Word := 1;
Integer := 1;
Int64 := 1;
Что теперь скажешь?
Как много людей не понимает, что такое константы.
Denis_ (2007-09-18 13:13:00) [3]
> Я не говорил о практическом смысле.
Тоды зачем ты сюды писал? ИМХО смысла нет.
DiamondShark (2007-09-18 13:12:00) [4]
> загадочен смысл строки
> 0..$7F 0..127 0..127
Чего загадочного? Там же колонки подписаны.
Константа из диапазона 0..127 имеет тип 0..127.
Значит для sizeof(2) вернёт sizeof(T), где type T=0..127
Суслик (2007-09-18 12:58:00) [5]
> [30] Anatoly Podgoretsky © (18.09.07 08:42)
> > Суслик (18.09.2007 01:23:24) [24]
> А как ты эту справку интерпритируешь?
сложно ее интерпретировать, ибо загадочен смысл строки
0..$7F 0..127 0..127
Но есть у меня ощущение, что константа 2 типа shortint. Посему 1.
clickmaker (2007-09-18 09:32:00) [6]тестовое задание в яндекс-деньги?
isasa (2007-09-18 09:04:00) [7]А написать
GetMem(Result, SizeOf(TSomeRecord));
не сподобил Господь, или это изошренный пример на ловле выравнивания полей в записи ... :)
"Так жить(писать) нельзя" (с) Кто-то.
(2007-09-18 08:50:00) [8]Удалено модератором
Anatoly Podgoretsky (2007-09-18 08:42:00) [9]> Суслик (18.09.2007 01:23:24) [24]
А как ты эту справку интерпритируешь?
Anatoly Podgoretsky (2007-09-18 08:42:00) [10]> NL (18.09.2007 01:41:25) [25]
> Это почему же? Я думал 8.
Чего тут думать, трясти надо.
Anatoly Podgoretsky (2007-09-18 08:40:00) [11]> NL (18.09.2007 00:47:15) [15]
> Подсказал бы, а орешник не будет забыт.
Не уже ли за инструментом пойдешь?
Anatoly Podgoretsky (2007-09-18 08:38:00) [12]> NL (18.09.2007 00:22:05) [5]
Ты больше так не пиши, а то потом удивляемся почему АЭС на воздух взлетают
Германн (2007-09-18 01:46:00) [13]
> NL (18.09.07 01:41) [25]
>
>
> > Бо значение SizeOf(2) не имеет никакого практического
> смысла.
>
> Я не говорил о практическом смысле.
>
А вот это зря.
Суслик (2007-09-18 01:44:00) [14]
> NL (18.09.07 01:41) [25]
>
> > Так по ней получаетца, что 1 и должно быть.
>
> Согласен, но это не ответ на вопрос.
ну тогда ищи свой ответ :)
NL (2007-09-18 01:41:00) [15]
> Бо значение SizeOf(2) не имеет никакого практического смысла.
Я не говорил о практическом смысле.
> Так по ней получаетца, что 1 и должно быть.
Согласен, но это не ответ на вопрос.
> DrPass © (18.09.07 01:21) [23]
> В то же время TSomeRecord занимает по умолчанию 16 байт
Это почему же? Я думал 8.
Суслик (2007-09-18 01:23:00) [16]
> NL (18.09.07 01:15) [20]
> ShowMessage(IntToStr(SizeOf(2)));
>...
> Сомневаюсь
Эта, автар. Я же привел кусок справки (справка, правда, говно - но это всем известно). Так по ней получаетца, что 1 и должно быть.
Т.е. ты нашел ответ. Что еще надо?
Если хочешь не потерять совместимость с новой версией Дефльи, то воспользуйся советом из [18].
DrPass (2007-09-18 01:21:00) [17]
> NL (18.09.07 01:15) [20]
> ShowMessage(IntToStr(SizeOf(2)));
>
> рисует 1!
Да. Ну и что?
> > Думаю, что это ответ на вопрос?
>
> Сомневаюсь
Это ответ на вопрос. Вспомни старую поговорку "смотрим в книгу, видим фигу"
> Когда может произойти ошибка?
GetMem(Result, SizeOf(A) + SizeOf(B)) выделяет 5 байт. В то же время TSomeRecord занимает по умолчанию 16 байт, если она неупакована. Такая некорректная работа привести к AV, к повреждению значений других переменных... а может не привести. Это уж как повезет.
Германн (2007-09-18 01:18:00) [18]
> ShowMessage(IntToStr(SizeOf(2)));
>
> рисует 1!
>
Плюнь и разотри. Бо значение SizeOf(2) не имеет никакого практическогосмысла.
DrPass (2007-09-18 01:16:00) [19]
> Германн © (18.09.07 01:14) [19]
Почему шутка? Это естественное следствие
> на самом деле это и не функция даже, а такой себе compiler-
> magic макрос
NL (2007-09-18 01:15:00) [20]
> {$if sizeof(2)<>1}
> ошибка
> {$ifend}
ShowMessage(IntToStr(SizeOf(2)));
рисует 1!
> Думаю, что это ответ на вопрос?
Сомневаюсь
> DrPass © (18.09.07 01:00) [16]
Когда может произойти ошибка?