只有 Inline 属性设置为 in_header 的原语操作和全局函数可以作为宏来生成。Inline 属性对于构造函数或析构函数无效。直接插入操作没有检测。
#define OperationName(ArgumentList) \
操作的返回类型和自变量类型会被忽略。宏所生成的每一行都会以“\”结束。用户代码两边不会生成花括号(“{”和“}”)。利用花括号,您可以撰写简短的返回值的宏。以下示例显示了一个宏定义:
(#define isEqual(arg1, arg2) (arg1)==(arg2))
如果宏是双向的,行末会添加反斜杠(“\”)。下一次代码生成会添加第二个反斜杠“\ \”,这样会导致编译错误。多余的反斜杠必须手动除去。
以下示例是为对象 A 的原语操作 op() 生成的代码。该操作的 Inline 属性设置为 in_header。宏定义生成在 A 的规范文件 (A.h) 中。该操作调用全局函数 Global_F(),而该函数也可以在退出之前直接插入生成:
#define A_op(me) \
/*#[ operation op() */ \
int i; \
for(i = 0; i < 3; i++) { \
printf("LOOP\n"); \
} \
Global_F(); \
/*#] */