Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
@!!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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.046 c
15-1205176108
builder
2008-03-10 22:08
2008.06.22
Если разница указывая адрес писать www или нет?


2-1212023253
snake-as
2008-05-29 05:07
2008.06.22
Тект разным цветом


15-1210145256
Галинка
2008-05-07 11:27
2008.06.22
Как вернуть массив строк из dll


10-1118062128
som
2005-06-06 16:48
2008.06.22
Ошибка при заполнении таблицы данными (Word)


15-1210236649
JanMihail
2008-05-08 12:50
2008.06.22
Схема документа MS Word





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский