ABSOLUTE = 1? ( 积分: 100 )

  • 主题发起人 主题发起人 dirk
  • 开始时间 开始时间
D

dirk

Unregistered / Unconfirmed
GUEST, unregistred user!
在写一段程序时,拷贝了一段定义动态数组变量的代码,然后改成固定维数的数组,改的时候看都没看屏幕,直接敲了[0 .. 9],当敲完后,抬头一看代码居然自动变成:AAA: array[0 ..ABSOLUTE 9] of string;,ABSOLUTE是ide自己上去的,由于没看屏幕,怎么上去的都不知道。于是删了数字9,编译,居然通过,不理解AAA: array[0 ..ABSOLUTE] of string;是什么意思,看ABSOLUTE的帮助,是把一个变量定义在另外一个变量的地址上,ABSOLUTE是保留字,自然找不到定义,从运行中看,ABSOLUTE=1,居然可以这么用?

我是D6。
 
呵呵,我也遇到过类似的问题。之所以会莫名其妙的出现ABSOLUTE,是因为数组定义中的
".."激活了Delphi的成员变量显示机制,在取不到“主对象”的情况下,就会将当前代码可
见的所有变量都显示出来。而楼主恰好又对成员变量列表按名字排序,所以ABSOLUTE就被默
认选中,然后,楼主按了空格,ABSOLUTE就被加入到代码中了。
至于ABSOLUTE的取值为1,可以利用右键菜单的“Browse Symbol at Cursor”的功能,结
果发现在Windows.pas中竟然真有ABSOLUTE的定义:

{ Coordinate Modes }
{$EXTERNALSYM ABSOLUTE}
ABSOLUTE = 1;

[:D]
 
Absolute子句,用于指定变量的值在内存中存贮的绝对位置.

var
Str: string[32];
StrLen: Byte absolute Str;
指定变量StrLen 从Str 的地址开始。因为短字符串的第一个字节包含字符串的长度,StrLen 的值就是Str 的长度。

这个指示字后还可以跟一个段值和一个偏移量,如:
Var CrtMode:Byte Absolute $0040:$0049;
 
果然,这样可以吓唬吓唬人,呵呵

const
{$EXTERNALSYM private}
private = 1;
{$EXTERNALSYM PUBLIC}
public = 2;
{$EXTERNALSYM protected}
protected = 3;
{$EXTERNALSYM published}
published = 4;
{$EXTERNALSYM automated}
automated = 5;
{$EXTERNALSYM on}
on = 6;
 
多人接受答案了。
 
后退
顶部