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 байта? И чем он (компилятор) будет руководствоваться?


Германн   (2007-09-18 01:14:00) [21]


> Суслик ©   (18.09.07 01:07) [18]
>

Если это шутка юмора, то не понял, где нужно смеяться.


Суслик   (2007-09-18 01:07:00) [22]


> NL   (18.09.07 00:13)  
> Всем привет!
> SizeOf(2) - выделит 1, 2 или 4 байта? И чем он (компилятор)
> будет руководствоваться?

Можно умный вещь скажу, только тыне обижайся (с)

Если ты хочешь заложица на то, что SizeOf(2) = 1, то напиши в коде

{$if sizeof(2)<>1}
ошибка
{$ifend}


При переезде на новую версию Дельфи будешь уверен, что нет регресса и все работает точно также как раньше.


Суслик   (2007-09-18 01:01:00) [23]

есть еще порох в пороховницах, не разучился искать (хелп из д2007 - ms-help://borland.bds5/devcommon/declaredconstants_xml.html)

Types for integer constants

Range of constant(hexadecimal)   Range of constant(decimal)   Type  
-$8000000000000000..-$80000001   -2^63..-2147483649   Int64  
-$80000000..-$8001   -2147483648..-32769   Integer  
-$8000..-$81   -32768..-129   Smallint  
-$80..-1   -128..-1   Shortint  
0..$7F   0..127   0..127  
$80..$FF   128..255   Byte  
$0100..$7FFF   256..32767   0..32767  
$8000..$FFFF   32768..65535   Word  
$10000..$7FFFFFFF   65536..2147483647   0..2147483647  
$80000000..$FFFFFFFF   2147483648..4294967295   Cardinal  
$100000000..$7FFFFFFFFFFFFFFF   4294967296..2^631   Int64  

-----------
Думаю, что это ответ на вопрос?


DrPass   (2007-09-18 01:00:00) [24]


> Задай, плз, значения переменным, чтобы вылезла ошибка

Причем здесь значения? Sizeof значений никоим образом не касается. Эта функция проверяет только тип. Это грубо говоря, т.к. на самом деле это и не функция даже, а такой себе compiler-magic макрос, на этапе компиляции заменяющийся на вычисленный по ходу размер переменной.


NL   (2007-09-18 00:47:00) [25]


> Да, это вопрос на 5 баллов :)
> Как это что? За тобой прилетят братья по разуму с планеты
> Плюк и привезут два эцика с КЦ на своем пепелаце.

Задай, плз, значения переменным, чтобы вылезла ошибка. Я что-то не могу.


> Сергей М. ©   (18.09.07 00:33) [11]

Подсказал бы, а орешник не будет забыт.


DrPass   (2007-09-18 00:44:00) [26]


> NL   (18.09.07 00:42) [13]
>
> > С выравниванием полей
>
> Ну и что получится?

Да, это вопрос на 5 баллов :)
Как это что? За тобой прилетят братья по разуму с планеты Плюк и привезут два эцика с КЦ на своем пепелаце.


NL   (2007-09-18 00:42:00) [27]


> С выравниванием полей

Ну и что получится?


DrPass   (2007-09-18 00:34:00) [28]


> А тут все в поряде:
> type
>  PSomeRecord = ^TSomeRecord;
>  TSomeRecord = record
>  F1: Byte;
>  F2: DWORD;
> end;
>
> function GetSomeRecord: PSomeRecord;
> var
>  A: Byte;
>  B: DWORD;
> begin
>  A := 1;
>  B := 2;
>  GetMem(Result, SizeOf(A) + SizeOf(B));
>  Result^.F1 = A;
>  Result^.F2 = B;
> end;


> Там есть ошибка, а какая - не знаю. Вот, подумал, может
> с выделением памяти

С выравниванием полей
Тогда уже TSomeRecord = packedrecord


Сергей М.   (2007-09-18 00:33:00) [29]


> Там есть ошибка, а какая - не знаю


Лучшего удобрения  Орешнику нет и не будет)


NL   (2007-09-18 00:29:00) [30]


> Не вижу связи сабжа с [5]...

Там есть ошибка, а какая - не знаю. Вот, подумал, может с выделением памяти?


Dimaxx   (2007-09-18 00:28:00) [31]

Не вижу связи сабжа с [5]...


Сергей М.   (2007-09-18 00:27:00) [32]


>  A: Byte;


SizeOf(A) = 1


NL   (2007-09-18 00:25:00) [33]


> Dimaxx ©   (18.09.07 00:15) [1]

Нифига SizeOf(2) = 1; SizeOf(256) = 2;


Суслик   (2007-09-18 00:25:00) [34]

практика - критерий истины.

я не помню, что константы специфицированы в сорв. версии дельфи.
раньше было что-то вроде.


NL   (2007-09-18 00:22:00) [35]

А тут все в поряде:
type
 PSomeRecord = ^TSomeRecord;
 TSomeRecord = record
 F1: Byte;
 F2: DWORD;
end;

function GetSomeRecord: PSomeRecord;
var
 A: Byte;
 B: DWORD;
begin
 A := 1;
 B := 2;
 GetMem(Result, SizeOf(A) + SizeOf(B));
 Result^.F1 = A;
 Result^.F2 = B;
end;
?


NL   (2007-09-18 00:20:00) [36]


> Сергей М. ©   (18.09.07 00:15) [2]

т.е.?


Сергей М.   (2007-09-18 00:20:00) [37]


> SizeOf(2) - выделит 1, 2 или 4 байта?


Когда SizeOf(..) чего-то там кому-то там выделит -  "Я дам тебе знать  - И ты вернешься ко мне" (С) Макар


Dimaxx   (2007-09-18 00:15:00) [38]

Попробуй и увидишь. Я думаю будет 4, ибо "по умолчанию" используется 32-разрядный тип.


Сергей М.   (2007-09-18 00:15:00) [39]

А рядом деньги ходят)


Страницы:   1 2

Наверх

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