Форум: "Начинающим";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
ВнизЦелочисленный тип для операций с указателями Найти похожие ветки
← →
PinDOS (2010-08-24 21:57) [0]Здравствуйте уважаемые мастера!
Для простых операций с указателем (Pointer) всегда применял тип Cardinal. К примеруCardinal(P1) := Cardinal(P2) + 4;
Но что делать если компилятор будет 64-разрядным, Pointer тогда занимает 8байт, а Cardinal так и останется 4. В FPC сделан отдельный целочисленный тип для таких операций. Как называется такой тип в делфи (если он есть)?
Спасибо!
← →
QAZ (2010-08-24 22:08) [1]как тока делфя станет х64 то сразу Pointer64 появится ну а Int64 уже есть
← →
Eraser © (2010-08-24 22:42) [2]> [0] PinDOS (24.08.10 21:57)
Cardinal станет 64 разрядным.
> Cardinal(P1) := Cardinal(P2) + 4;
таких записей лучше избегать или писать такCardinal(P1) := Cardinal(P2) + SizeOf(Pointer);
← →
PinDOS (2010-08-24 22:57) [3]
> 4
просто число, это для примера, можно 124
> как тока делфя станет х64 то сразу Pointer64 появится ну
> а Int64 уже есть
оно то появится, вот только:QWord(P1) := QWord(P2) + 124; // в 32х битной системе будет не знаю что
// и хотелось бы избежать этого
// в то время как
Cardinal(P1) := Cardinal(P2) + 124; // в 64-битной системе результат будет неверный
в FPCPtrUInt(P1) := PtrUInt (P2) + 124; // будет верный результат и на 32 и на 64 битной системе
← →
sniknik © (2010-08-24 23:24) [4]> в FPC
> PtrUInt(P1) := PtrUInt (P2) + 124; // будет верный результат и на 32 и на 64 битной системе
т.е. они integer-у синоним придумали? молодцы какие...
← →
sniknik © (2010-08-24 23:26) [5]http://delphimaster.net/view/2-1282567015/
а, понял, лавры FPC покоя не дают. решил переплюнуть, на одном синониме не останавливаться.
← →
PinDOS (2010-08-24 23:57) [6]
> лавры
-----------------------------
Система Тип Размер
-----------------------------
32 бита Cardinal 4
Pointer 4
PtrUInt 4
-----------------------------
64 бита Cardinal 4
Pointer 8
PtrUInt 8
-----------------------------
4, оно не равно 8, в этом есть скрытый смысл
← →
sniknik © (2010-08-25 00:18) [7]Cardinal, оно не равно integer, в этом есть скрытый смысл
← →
PinDOS (2010-08-25 00:20) [8]
> Cardinal, оно не равно integer, в этом есть скрытый смысл
ни в одном моем комментарии до сего не было упоминания типа integer (PtrUInt - Pointer Unigned Integer)
← →
sniknik © (2010-08-25 00:25) [9]> т.е. они integer-у синоним придумали? молодцы какие...
← →
sniknik © (2010-08-25 00:33) [10]Сергей М. © (23.08.10 17:40) [6]
> что бы разрядность выбирал я, а не компилятор
Ну и выбирай себе на здоровье из имеющихся)
Зачем свои-то типы плодить без явной надобности ?
Просто не используй типы Integer и Cardinal - они платформозависимы
после этого сомнения что то, что
> 64 бита Cardinal 4 <-- вот в этом
ты вообще чего хочешь? выбирать разрядность самому это прямо противоположное тому, что в этой ветке, чтобы типы были платформозависимы.
← →
Германн © (2010-08-25 02:43) [11]
> ты вообще чего хочешь?
Тут что-то родственное мне железячнику, имхо.
Автор использует packed record и хочет добиться совместимости с любым компилятором паскаля.
Зачем это нужно - это вопрос к автору.
← →
Anatoly Podgoretsky © (2010-08-25 06:43) [12]> PinDOS (24.08.2010 23:57:06) [6]
> 64 бита Cardinal 4
Ты это сам придумал, или тебе Борланд сообщил?
← →
PinDOS (2010-08-25 12:11) [13]С вопросом разобрался, компилятора Delphi 64 нету, просто написал с использованием директив ifdef что в делфи
PtrUInt = DWord;
Трудно было просто ответить, почему надо троллить
> Anatoly Podgoretsky
я это взял из документации FPC (http://wiki.freepascal.org/Integer)
> sniknik
я не хочу что бы получилось Access violation at adress ... из-за того что платформозависимый тип "пересекся" с платформонезависимым
> Германн
спс за совет
Спасибо)
← →
Anatoly Podgoretsky © (2010-08-25 12:44) [14]
> я это взял из документации FPC
Это другой продукт, к Дельфи отношения не имеет. Да хоть размером в байт, их право.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c