编译开关(IDE问题)(50分)

  • 主题发起人 主题发起人 autumn
  • 开始时间 开始时间
A

autumn

Unregistered / Unconfirmed
GUEST, unregistred user!
// 默认情况下Delphi IDE不允许下面程序(编译不通过)
const
iATest:integer=10;
begin
if TComponent(Sender).Tag<>10 then
iATest:=8;
.......
//要打开或关闭什么IDE开关才能允许上面程序通过?
 
{$J+}允许修改typed constants
{$J-}则不允许
或者在project options /compiler/assignable typed constans打勾或者不打勾
 
const
iATest:integer=10;
begin
if TComponent(Sender).Tag<>10 then
iATest:=8;
.......
和下面程序有什么区别?实际如何应用?
var
iATest:integer;
begin
iATest:=10;
if TComponent(Sender).Tag<>10 then
iATest:=8;
.......
 
const
iATest:integer=10;
类似于c语言的函数里面的static变量
就是说,你这次设置了他的值,下次调用,是你上次修改的值
比如:
const
i:integer=0;
begin
i:=i+1;
//i可以记忆,从1、2、3、4、5纪录调用的次数
 
有这个必要吗?
 
我那个只是个例子,反正c的静态变量(static)我就用的多了,怎么会没作用
比如,有一个函数,它调用的时候是每隔一次不同的
const
a:boolean=true;
begin
if a then
aaaaaaaaa
else
bbbbbbbbb;
a:=not a;
end;
那么调用这个函数的时候就会一次调用aaaaaaa一次调用bbbbbbbbb

const
level:integer=0;
begin
level:=level+1;
……这里递归
level:=level-1;
end;
这样可以判断当前递归的层次
 
静态变量放到外面(interface中):根据作用域不同,分别放到private、public、或var下
 
Pipi.的意思我明白了。immd的分private,public,var怎么分,什么意思?不明白阿,呵呵
我明白在implementation中如何使用而已
 
反正c语言的
void f()
{
static int a=0;
}

就对应delphi的

procedure f;
const
a:integer=0;
begin
end;
 
immd的不要听他的,他的和静态变量不是一回事,最多是不会用的时候拿来代替代替罢了
 
再问Pipi.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
const aaa:integer=111;//这里
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
const aaaa:integer=111;//这里
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const aaaa:integer=10;///这里有什么区别?
begin
a:=a+10;
caption:=inttostr(a);

end;

end.

这几个地方有什么区别?和var一样意思吗(代表不同作用域)?
 
我说的和c的static对应的仅指第三种情况
第一、二种仅仅是用作提供常数,但是因为他们和全局变量一样处于数据段,他们是可能被误修改的
第一种全局的常数,当别的unit他uses这个unit的时候,别的unit可以使用他
第2种也是属于全局的常数,但是只能被本unit看见
 
原来常量可以赋值,又学一手;
以前我也在想PASCAL中怎样实现C中的静态变量功能;
现在可以用这种手段实现,但好象不是编译器默认且不标准PASCAL的方法;
我想标准的方法应是在一个单独的单元中建一个变量这个变量对全局就是不可见的,
在过程中去引用它:
UNIT STATIC_A;
INTERFACE
VAR I:INTEGER;
IMPLEMENTATION
END;

PROCEDURE A;
USES STATIC_A;{不过BORLANDPASCAL 不支持这种在过程中引用单元,而MODULA-2支持}
BEGIN
I:=I+1
END;
 
看第3方控件发现那些作者很喜欢用这个,却老是搞不清楚这个问题。呵呵,
谢谢Pipi.了![:)]
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部