![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что подумает об этом компилятор?
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]А рядом деньги ходят)