代码之家  ›  专栏  ›  技术社区  ›  Jeff Moorhead

&global-define和&scoped-define in progress 4GL之间有什么区别?

  •  1
  • Jeff Moorhead  · 技术社区  · 7 年前

    我知道这两个指令都是预处理器指令,但我无法弄清楚它们是如何不同的。官方进度文档中所述的所有内容都是“global-define和scoped-define指令的语法相同,但这些指令的用法不同。”这并不是很有帮助。

    我发现有一个源代码说,编译器完成当前文件之前&scoped-define变量保持定义状态,而&global-define变量保持定义状态,直到编译器完成当前程序。不过,我不太明白这意味着什么。此源还声明&scoped-define变量沿include堆栈传播,但不向上传播(我假设&global-define是双向的?).我试图创建一个简单的示例,但无论怎样,我都无法找出区别。

    文件1:Test1.P

    {test2.i}
    

    文件2:Test2.i

    &GLOBAL-DEFINE HELLO "Hello world!"
    {test3.i}
    

    文件3:Test3.I

    MESSAGE {&HELLO} VIEW-AS ALERT-BOX.
    

    不管hello是范围定义的还是全局定义的,它仍然在test3.i中定义。那么有什么区别呢?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Screwtape    7 年前

    你说你假设全球向上传播,这就是我发现的 here 在寻找答案时。然而,您的示例只测试向下传播。也许你需要这个…

    文件1:Test1.P

    {test2.i}
    MESSAGE {&HELLO} VIEW-AS ALERT-BOX.
    MESSAGE "{&GOODBYE}" VIEW-AS ALERT-BOX.
    

    文件2:Test2.i

    &GLOBAL-DEFINE HELLO "Hello world!"
    &SCOPED-DEFINE GOODBYE Goodbye-cruel-world
    {test3.i}
    

    文件3:Test3.I

    MESSAGE {&HELLO} VIEW-AS ALERT-BOX.
    MESSAGE "{&GOODBYE}" VIEW-AS ALERT-BOX.
    

    我希望test1.p能给你看 Hello world! 后面是一条空消息,而test3.p将完整地显示这两条消息。但是我没有试过,所以我可能错了。

    推荐文章