インライン操作

C_CG::Operation::Inline プロパティーを使用すると、基本操作とグローバル関数をマクロとして生成できます。 このマクロは、所有者オブジェクトの宣言ファイルに定義されます。 操作呼び出しは、前処理の間にそのマクロ用に指定された未解釈テキストと、インラインで置き換えられます。

Inline プロパティーが in_header に設定されている基本操作とグローバル関数のみが、マクロとして生成できます。 Inline プロパティーは、コンストラクターあるいはデストラクターに対しては機能しません。 インライン操作にはトレース/アニメーション設定はありません。

マクロは、所有者オブジェクトの宣言ファイルに次のように定義されます。

#define OperationName(ArgumentList) ¥

戻りの型および引数タイプあるいは操作は無視されます。 マクロの生成された各行は、末尾に「¥」が付きます。 中括弧 (「{」と「}」) は、ユーザー・コードの周囲には生成されません。中括弧を使用して、値を返す短いマクロを作成することができます。 以下に、マクロ定義の例を示します。

(#define isEqual(arg1, arg2) (arg1)==(arg2))

マクロがラウンドトリップされると、行の末尾に円記号 (「¥」) が追加されます。 次にコード生成すると、2 つ目の円記号 (「¥ ¥」) が追加され、これはコンパイル・エラーの原因になります。 余分な円記号は、手動で除去する必要があります。

エラーの強調表示で、呼び出し操作 (マクロ呼び出し) の行が表示されます。

次の例は、オブジェクト 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();              ¥
/*#] */

フィードバック