Я понимаю, что оба являются директивами препроцессора, но я не могу понять, чем они отличаются.Все, что указано в официальной документации Progress: «Синтаксис директив & GLOBAL-DEFINE и & SCOPED-DEFINE идентичен, но эти директивы используются по-разному».что не очень полезно.
Я нашел один источник, который говорит, что переменные & SCOPED-DEFINE остаются определенными до тех пор, пока компилятор не заканчивает текущий файл, в то время как переменные & GLOBAL-DEFINE остаются определенными, пока компилятор не завершит текущую программу.Однако я не совсем понимаю, что это значит.Этот источник также утверждает, что переменные & SCOPED-DEFINE распространяются по стеку включения, но не по нему (я полагаю, что & 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 & SCOPED-DEFINE или & GLOBAL-DEFINE, он все еще определен в test3.i.Так в чем же разница?