Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

Кто не прав.   Найти похожие ветки 

 
@!!ex ©   (2008-05-08 13:28) [0]

KSergey в http://delphimaster.net/view/15-1210231595/
заметил, что С++ логический тип bool и дельфевый boolean - разные несовместимые типа.
Однако сейчас компался и и тот и тот тип в памяти представляются одинаково.
Вот и вопрос, можно ли считать эти типы равнозначными при работе с dll?


 
Palladin ©   (2008-05-08 13:32) [1]

теоретически нет, pascal/delphi оперирует константами true/false на уровне языка, с/с++ оперируют сравнением с нулем... никто не гарантирует уход pascal/delphi на другие значения ord(boolean), но практически могу сказать что да, ни у кого нет в интересах менять это сложившееся положени вещей... :)


 
Rouse_ ©   (2008-05-08 14:16) [2]


> заметил, что С++ логический тип bool и дельфевый boolean
> - разные несовместимые типа.

BOOL - 4 байта, Boolean - 1 байт. Они совместимы так-же как Byte и DWORD, т.е. с определенными ограничениями


 
@!!ex ©   (2008-05-08 14:51) [3]

> [2] Rouse_ ©   (08.05.08 14:16)

не BOOL, а bool


 
palva ©   (2008-05-08 15:01) [4]


> с/с++ оперируют сравнением с нулем


В с++ теперь появился встроенный тип bool с константами true / false

Но все еще популярны BOOL, TRUE, FALSE, использующиеся с давних пор при программировании на Windows API.


 
Rouse_ ©   (2008-05-08 15:03) [5]


> не BOOL, а bool

Ааа... ну тогда см [1]


 
DrPass ©   (2008-05-08 15:22) [6]


> теоретически нет, pascal/delphi оперирует константами true/false
> на уровне языка, с/с++ оперируют сравнением с нулем... никто
> не гарантирует уход pascal/delphi на другие значения ord(boolean),
>  

В Delphi в свое время Borland сознательно ввела типы LongBool, ShortBool, имеющие внутреннее представление как в с/с++


 
Palladin ©   (2008-05-08 15:23) [7]


> DrPass ©   (08.05.08 15:22) [6]

угу, в Delphi и в свое время... :)


 
Anatoly Podgoretsky ©   (2008-05-08 15:27) [8]

> @!!ex  (08.05.2008 13:28:00)  [0]

Ты неправ, и те кто предполагал об представление в памяти жестоко поплатились.
Ну и не мешало бы почить что такое bool и на закуску различие между General и Fundamental типами.


 
TUser ©   (2008-05-08 15:34) [9]

Мое имхо, - программа, которая описарается в своих выкладках на внутреннее представление какого-либо типа, плоха. А что если завтра выйдет новый компилятор, с супер-фичей, которую надо пользовать, но с другим внутренним представлением була?

зы. Хотя сам грешен, однажды в программе использовал для идентификации объектов численное значение указателя на них. Очень удобно их было упорядочивать и потом быстро находить. Прога до сих пор крутится, но сейчас я так ни в жизни не сделаю.


 
tesseract ©   (2008-05-08 15:35) [10]


> DrPass ©   (08.05.08 15:22) [6]


Не только там. В COM например, и  в WinApi также :-)


 
@!!ex ©   (2008-05-08 15:41) [11]

Вобщем я понял. Для внешнего интерфейса стоит использовать стандартные типы принятные в ОС.


 
han_malign ©   (2008-05-08 15:55) [12]

короче расширение bool-глюк-теста
sapienty sat

program _bcast;
{$APPTYPE CONSOLE}
{$IFDEF VER150}
{$WARN UNSAFE_TYPE OFF}
{$WARN UNSAFE_CAST OFF}
{$WARN UNSAFE_CODE OFF}
{$ENDIF}
uses
 Windows,
 SysUtils;
function bcast(b: ByteBool; oa: array of const): string;
begin
  Result:= Format(
     #9"Ord(Bool): %d; Int(Bool): %d; Absolute cast(Bool): %x"#13#10+
     #9"Ord(ByteBool): %d; Int(ByteBool): %d; Absolute cast(ByteBool): %x"#13#10+
     #9"Open array cast!: %x",
     [Ord(oa[0].VBoolean), Integer(oa[0].VBoolean), PByte(@oa[0].VBoolean)^,
      Ord(b), Integer(b), PByte(@b)^,
      oa[0].VInteger]);
end;

const _bv: array[false..boolean(3)]of string = ("false", "true", "!!!! out of index 1 !!!!", "!!!! out of index 2 !!!!");
function bv(b: boolean): string;
begin
  if(b)then Result:= "true" else Result:= "false";
  Result:= Result + " = "+IntToStr(ord(b));
end;
var b0, b1, b2: boolean;

begin
  writeln("false: "+bcast(false, [false]));
  writeln("true: "+bcast(true, [true]));
  //fill the stack and check open array cast
  writeln("fake: "+bcast(true, [65530]));
  writeln("false: "+bcast(false, [false])+"<>0!!!");

  byte(b0):= 0;
  byte(b1):= 1;
  byte(b2):= 2;
  writeln("b",ord(b1)," ",bv(b1));
  writeln("b",ord(b2)," ",bv(b2));
  writeln("not b",ord(b1)," ",bv(not b1));
  writeln("not b",ord(b2)," ",bv(not b2));
  writeln("b",ord(b1)," = true ",bv(b1 = true));
  writeln("b",ord(b2)," = true ",bv(b2 = true));
  writeln("b",ord(b1)," and true ",bv(b1 and true));
  writeln("b",ord(b2)," and true ",bv(b2 and true));
  writeln("b",ord(b1)," or b",ord(b2)," ",bv(b1 or b2));
  writeln("b",ord(b1)," and b",ord(b2)," ",bv(b1 and b2));
  writeln("b",ord(b1)," and not b",ord(b2)," ",bv(b1 and not b2));
  writeln("b",ord(b1)," or not b",ord(b2)," ",bv(b1 or not b2));
  writeln("not b",ord(b1)," or not b",ord(b2)," ",bv(not b1 or not b2));

  writeln("index[b",ord(b1)," or b",ord(b2),"] ",_bv[b1 or b2]);
end.

========================================
false:  Ord(Bool): 0; Int(Bool): 0; Absolute cast(Bool): 0
       Ord(ByteBool): 0; Int(ByteBool): 0; Absolute cast(ByteBool): 0
       Open array cast!: 0
true:   Ord(Bool): 1; Int(Bool): 1; Absolute cast(Bool): 1
       Ord(ByteBool): -1; Int(ByteBool): -1; Absolute cast(ByteBool): FF
       Open array cast!: 1
fake:   Ord(Bool): 250; Int(Bool): 250; Absolute cast(Bool): FA
       Ord(ByteBool): -1; Int(ByteBool): -1; Absolute cast(ByteBool): FF
       Open array cast!: FFFA
false:  Ord(Bool): 0; Int(Bool): 0; Absolute cast(Bool): 0
       Ord(ByteBool): 0; Int(ByteBool): 0; Absolute cast(ByteBool): 0
       Open array cast!: FF00<>0!!!
b1 true = 1
b2 true = 2
not b1 false = 0
not b2 true = 3
b1 = true true = 1
b2 = true false = 0
b1 and true true = 1
b2 and true true = 1
b1 or b2 true = 3
b1 and b2 false = 0
b1 and not b2 false = 0
b1 or not b2 true = 1
not b1 or not b2 false = 0
index[b1 or b2] !!!! out of index 2 !!!!


 
@!!ex ©   (2008-05-08 16:08) [13]

> [12] han_malign ©   (08.05.08 15:55)

что это??



Страницы: 1 вся ветка

Текущий архив: 2008.06.22;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
1-1195132473
DerbyW
2007-11-15 16:14
2008.06.22
Генерация интерфейсов для WebService(SOAP) на основании WSDL


2-1211870709
Radgar
2008-05-27 10:45
2008.06.22
Мерцание при перемещении


15-1210102201
Маэстро
2008-05-06 23:30
2008.06.22
Программисты вопрос!!!!!


2-1212067160
TBase_Tree
2008-05-29 17:19
2008.06.22
SQL


15-1210074026
Hint
2008-05-06 15:40
2008.06.22
Окощки как у трея