@def_macro 宏名称(宏参数名称, ...) 宏内容
注意事项:
A. 参数表的左括号必须紧跟在宏名称后面,中间不能存在空白字符,不然就会被认为是宏内容的一部分;
如: @def_macro TEST(param1) param1
该宏的名称为TEST,具有一个名为param1的宏参数,宏内容是直接使用该参数.
如果左括号与TEST之间存在空白字符的话,如: @def_macro TEST (param1) param1
那么该宏就是一个名为TEST,没有参数,宏内容为"(param1) param1".
B. 参数表中可以包括一个或多个宏参数名称,多个参数名称之间使用逗号进行分隔;
如: @def_macro MY_ADD(param1, param2) param1 + param2
C. 宏内容中可以使用参数表内定义的宏参数名称,在使用该宏时将使用对应的实际参数内容进行替换;
D. 在宏内容中所使用的宏参数名称,如果其前方为1个'#'字符,该"#宏参数名"在进行宏替换时将被替换为字符串格式,即自动在两侧加上双引号;
如: @def_macro TEST(param1) #param1
使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 "abc" ,注意abc两侧双引号也是替换后内容的一部分.
E. 在宏内容中所使用的宏参数名称,如果其前方为2个'#'字符,该"##宏参数名"在进行宏替换时将自动与其前方内容连接起来.
如: @def_macro TEST(param1) wutao_##param1
使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 wutao_abc ,前后文本将连接在一起.
F. 如果使用宏时所提供的实际参数数目超出当前所定义宏参数数目,则所有多余参数内容将被统一视为最后一个宏参数的替换内容.
如: @def_macro TEST(param1) param1
使用该宏时如果提供了多余的参数,如 @m<TEST> (abc, bcd) ,则最终得到的替换结果就是 abc, bcd ,而不会报错.
此特性是为了支持将目标语言的复杂代码文本指定为宏的最后一个参数的内容,如:
@m<TEST> (myObject.myMethod (1, 2, 3)) ,最终得到的替换结果就是 myObject.myMethod (1, 2, 3) .