GDL 宏引數
巨集定義的內容可以參考所有、部分或無其正式引數,特別是針對值巨集定義,其中多個值巨集定義可以在一個 *Macros 建構中,使用所有定義共用的單一型式引數清單來建構。 在此情況下,一個定義可以參考一些正式引數,而另一個則參考無。
如果巨集定義省略對一或多個正式引數的參考,當參考宏時所提供的參數清單可以透過逗號 (,) 分隔任何參數來表示遺漏的參數。
例如,下列宏參考只會使用第五個引數。 省略前四個。
*Attribute: =Macro(,,,, =PassedInMacroRef)
您完全不需要指出尾端省略的參數。 如果上一個範例中的宏宣告了 10 個型式引數,但只參考第五個引數,則上述範例仍是參考宏的有效方法。
對於值宏,宏參考與其參數清單之間不允許空白字元。 此語法可讓剖析器區分不使用任何引數的宏參考,後面接著類似參數清單的專案,以及使用參數清單的宏參考。
例如,請考慮下列程式碼範例。
*Attrib: =Macro1 (=Macro2) *% is 2 separate macro references
while
*Attrib: =Macro1(=Macro2) *% you are passing Macro2 as a
*% parameter to Macro1.
如果巨集定義是巢狀的,則型式引數只能由宣告引數的宏內容使用。 巢狀巨集定義的內容無法參考封入巨集定義的引數。
巨集定義中發生的宏參考可以包含參數清單,以命名本身需要參數清單的宏。 不過,無法為型式引數的參考提供參數清單。 例如,區塊巨集定義內的下列專案是可接受的。
*Attrib1: =Macro1(=Macro2(=Macro3(=Arg1, =Arg2)))
在上述範例中,=MacroN 代表先前定義之值宏的參考,而 =ArgN 代表正式引數的參考。
不過,下列程式碼範例不是可接受的專案。
*Attrib2: =Arg1(=Arg2, =Arg3(=Macro1, =Macro2)) *% Not Valid !
如果宏參考符合宏所宣告的型式引數名稱,您可以假設它是該正式引數的參考,而不論實際宏是否存在該名稱。 您可以使用命名空間限定詞搭配宏參考來避免這類模棱兩可的情況。 不過,您無法搭配型式引數使用命名空間限定詞。
對於值宏,如果在 *Macros 建構中未宣告任何型式引數清單,則任何在 內定義的宏參考都不應遵循參數清單。 這類清單不會被視為宏參考的一部分。
例如,請考慮下列程式碼範例是否定義 =Macro1。
*Macros: NoArgList
{
Macro1: "a Value macro with no argument list"
Macro2: "a Value macro with no argument list"
Macro3: "a Value macro with no argument list"
}
然後,下列宏參考會解譯為三個個別且不相關的宏參考。
*attribute: =Macro1(=Macro2, =Macro3)
剖析器不會解譯 (=Macro2、=Macro3) 為 =Macro1 的參數清單。 此行為會保留與目前 GPD 的回溯相容性。