首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Delphi)检查函数调用者环境中switch指令的状态

(Delphi)检查函数调用者环境中switch指令的状态
EN

Stack Overflow用户
提问于 2009-08-14 16:00:42
回答 4查看 757关注 0票数 0

我知道我可以使用下面的结构检查Delphi的switch指令的当前状态:

代码语言:javascript
复制
{$IFOPT R+}
      Writeln('Compiled with range-checking');
{$ENDIF}

由于我缺乏关于Delphi后端编译器如何工作的深入资料,我不确定是否有一种方法可以根据调用它的代码行的switch指令的状态来更改函数的行为。它看起来像这样:

代码语言:javascript
复制
procedure P1;
begin  
    {$I+}
    P3; 
    {$I-}
end;

// ** state of I unknown

procedure P2;
begin
    {$I-}   
    P3; 
    {$I+}
end;

// ** state of I unknown

procedure P3;
begin       
    // Something like {$IFOPT I+}, but at the state P3 is called
    DoThis;
    {$ELSE}
    DoThat
    {$ENDIF}
end; 

我正在为遗留代码编写适配器,我迫切希望这些代码不受影响。P3不需要使用指令,但我认为这是可行的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-17 07:30:56

像这样修改你的程序

代码语言:javascript
复制
procedure P1;
begin  
    {$I+}
    P3(true); 
    {$I-}
end;

procedure P2;
begin
    {$I-}       
    P3(false); 
    {$I+}
end;

// ** state of I unknown, but the parameter know the state

procedure P3(WIthRangeCheck: Boolean);
begin       
    if WIthRangeCheck then
       DoThis
    else
       DoThat;
end;
票数 1
EN

Stack Overflow用户

发布于 2009-08-14 16:08:11

不,没有简单的方法可以做到这一点。编译器指令在与代码编译不同的级别上操作,并且它们不会将有关其状态的有意义的信息传递到代码中,并且它们肯定不会应用于其自身作用域之外。如果要将数据传递给过程,唯一的方法是使用变量,可以是参数,也可以是全局变量。

票数 4
EN

Stack Overflow用户

发布于 2009-08-14 16:09:22

据我所知,编译器指令只对正在编译的代码起作用,在本例中是“调用方法P3”,而不是P3方法本身的代码。

如果您在上面的代码中使用$IFOPT I+,P3将使用$I+进行编译(因为在上面稍微设置了一下),并且$IFOPT I+始终为真。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1278703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档