如何打印ada访问变量指向的地址?
出于调试目的,我想打印访问变量(指针)的地址如何打印ada访问变量指向的地址?,ada,Ada,出于调试目的,我想打印访问变量(指针)的地址 type Node is private; type Node_Ptr is access Node; procedure foo(n: in out Node_Ptr) is package Address_Node is new System.Address_To_Access_Conversions(Node); use Address_Node; begin Put_Line("node at address " &
type Node is private;
type Node_Ptr is access Node;
procedure foo(n: in out Node_Ptr) is
package Address_Node is new System.Address_To_Access_Conversions(Node);
use Address_Node;
begin
Put_Line("node at address " & System.Address_Image(To_Address(n)));
end foo;
地址\图像返回地址的字符串表示形式。System.Address_To_Access_Conversions是一个通用包,用于在地址和访问类型之间进行转换(请参阅),定义如下:
generic
type Object(<>) is limited private;
package System.Address_To_Access_Conversions is
-- [...]
type Object_Pointer is access all Object;
-- [...]
function To_Address(Value : Object_Pointer) return Address;
-- [...]
end System.Address_To_Access_Conversions;
btree_uuunode是上面定义的类型节点的损坏名称,因此我确实认为to_address()的参数类型是正确的,但是gnat在抱怨(参见上文)。好的,显式类型转换实现了以下目的:
procedure Foo(n: in out Node_Ptr) is
package Address_Node is new System.Address_To_Access_Conversions(Node);
use Address_Node;
p : Address_Node.Object_Pointer;
begin
p := Address_Node.Object_Pointer(n);
Put_Line("node at address " & System.Address_Image(To_Address(p)));
end Foo;
需要一些时间来适应Ada…;-) 目前我面前没有编译器,但这不管用吗
procedure foo(n: in out Node_Ptr) is
begin
Put_Line("node at address " & System.Address_Image(n.all'address)); --'
end foo;
是的。我没有发现任何关于访问变量显式解引用的内容,所以我假设Ada中没有这样的内容。我现在更清楚了,谢谢!您还可以执行
'access
来获取指针,这是一个更有用的微点。你真的不应该在Ada做这两件事,除非在一些非常罕见的情况下。我建议你去你的友好邻居Ada LRM的附录K(语言定义属性),仔细阅读。里面有很多好东西。
procedure Foo(n: in out Node_Ptr) is
package Address_Node is new System.Address_To_Access_Conversions(Node);
use Address_Node;
p : Address_Node.Object_Pointer;
begin
p := Address_Node.Object_Pointer(n);
Put_Line("node at address " & System.Address_Image(To_Address(p)));
end Foo;
procedure foo(n: in out Node_Ptr) is
begin
Put_Line("node at address " & System.Address_Image(n.all'address)); --'
end foo;