Форум: "Прочее";
Текущий архив: 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 satprogram _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