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