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

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

Целочисленные типы с указанием разрядности


PinDOS ©   (2010-08-23 16:36:00) 

Задумался о указании разрядности в названии целочисленных типов (в некоторых случаях надо что бы разрядность не зависела от компилятора, железа и ОС и что бы было очевидно какую разрядность имеет переменная), с этой целью сделал свой модуль, где написал примерно следующее (что и породило еще больше вопросов)


Int8U = Byte;
Int8S = ShortInt;
Int16U = Word;
Int16S = SmallInt;
Int32U = Cardinal;
Int32S = LongInt;
// Читал что тип Integer в некоторых Pascal-компиляторах
//  зависит от разрядности системы в которой
//  компелировался код (касательно компилятора используемого Lazarus'сом),
//  правда ли это и что будет с другими типами на другом железе и ОС?
Int64U = Int64;
IntS = Integer; // на тот случай если мне безразлична разрядность


Попытка использовать эти типы сделала код затруднительным к прочтению (все таки непривычные типы данных), допустим ли такой подход и как решается изложенная в начале проблема профессионалами? :)


icWasya   (2010-08-24 10:43:00) [1]

А вот переводить программу на другой язык - например с Pascal на C# или с C++ на Delphi - вот тогда и попробуйте понять - что означает short - в си и дельфи это разные вещи.
А когда есть набор типов Int8,uInt8 ... Int64 - тогда меньше головной боли.


0x00FF00   (2010-08-23 19:51:00) [2]

Cardinal меняй на DWORD, Integer на LongInt.
И наступит щастье.


Anatoly Podgoretsky   (2010-08-23 19:32:00) [3]


>  имел ввиду что бы разрядность выбирал я, а не компилятор

Используй только фундаментальные типы.


PinDOS   (2010-08-23 19:29:00) [4]


> Но при этом тип Word или SmallInt его почему-то не устраивает.

Занимался простой обработкой изображений - быстрая прорисовка прозрачного изображения на другом, растягивание, сжатие картинок... Ставил режим 32бита, потому пиксель занимал 4 байта (Red, Blue, Green, Opacity), доступ к цветовым компонентам производил через тип

 RDWord = packed record
   case Integer of
     0: (B: array [0..3] of Byte);
     1: (DW: Cardinal);
     2: (W: array [0..1] of Word);
     4: (Int: Integer);
   end;


собственно для этого и решил ввести другие наименования типов, тут названия Int32U мне кажутся более подходящими (нету под рукой переделанного примера), но в остальном коде это выглядит непривычно, а люди воспринимают это в штыки, я потому и спрашиваю, как сделать так что бы красиво было, но и чтобы код был един и не писать там Cardinal, а там Int32U


0x00FF00   (2010-08-23 19:06:00) [5]


> Или наоборот - использовать только такие. Тогда исходный
> код будет платформонезависимым.

Да ни фига.
Скажем, если в 64-битном окружении скомпилировать сдвиг Cardinal на 48 разрядов вправо, то это будет нормально.
А вот если в 32-разрядном — тады ой.


Сергей М.   (2010-08-23 18:35:00) [6]


> Юрий Зотов ©   (23.08.10 18:29) [8]


Ну автор-то как раз таки и не желает полагаться на платформонезависимость.
Ему, как я понял, нужно чтобы, скажем, переменная некоего типа при любом "раскладе" занимала 2 байта и ни битом больше/меньше).. Но при этом тип Word или SmallInt его почему-то не устраивает..


Юрий Зотов   (2010-08-23 18:29:00) [7]


> Сергей М. ©   (23.08.10 17:40) [6]

Или наоборот - использовать только такие. Тогда исходный код будет платформонезависимым.


RWolf   (2010-08-23 18:10:00) [8]

А кто в курсе, зачем разрабы FreePascal вообще сделали этот финт ушами с разрядностью Integer? многовато порядка в языке — надо, чтобы как в Си?


Сергей М.   (2010-08-23 17:40:00) [9]


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


Ну и выбирай себе на здоровье из имеющихся)
Зачем свои-то типы плодить без явной надобности ?
Просто не используй типы Integer и Cardinal - они платформозависимы


Юрий Зотов   (2010-08-23 17:32:00) [10]

> надо быть готовым переломить себя

Как только Вы объясните мне зачем и почему мне надо себя ломать, я немедленно начну это делать.


PinDOS   (2010-08-23 17:06:00) [11]


> Вертай все взад.

почему?


> Гы..

Я имел ввиду что бы разрядность выбирал я, а не компилятор


> Не так уж трудно запомнить разрядность всего лишь 8 типов

Выдержка из документации по FreePascal ( http://www.freepascal.org/docs-html/ref/refsu5.html)

Type   Range  Size in bytes
 
Byte  0 .. 255  1
Shortint  -128 .. 127  1
Smallint  -32768 .. 32767  2
Word  0 .. 65535  2
Integer  either smallint or longint  size 2 or 4
Cardinal  longword  4
Longint  -2147483648 .. 2147483647  4
Longword  0 .. 4294967295  4
Int64  -9223372036854775808 .. 9223372036854775807  8
QWord  0 .. 18446744073709551615  8

Делфи хорошая среда разработки, но надо быть готовым переломить себя и оч. не хочется что бы в далеких недрах кода сбойнула какая то мелочь


Юрий Зотов   (2010-08-23 16:47:00) [12]

> как решается изложенная в начале проблема профессионалами

Никак не решается. У них этой проблемы просто нет. Не так уж трудно запомнить разрядность всего лишь 8 типов. Тем более, что названия 5 из них говорят сами за себя (учитывая generic) - так что запоминать надо всего 3.


Сергей М.   (2010-08-23 16:45:00) [13]


> что бы разрядность не зависела от компилятора, железа и
> ОС


Гы..
А сам при этом жество обозначил эту зависимость в именах идентификаторов)


Anatoly Podgoretsky   (2010-08-23 16:39:00) [14]

Вертай все взад.


Наверх

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