Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что подумает об этом компилятор?


Страницы:   1 2

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]

Когда может произойти ошибка?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо