1

問題。 配列で計算するコードを取得しました。すべての配列読み取りを関数呼び出しに置き換えるマクロを定義しようとしています。次に例を示します。

このコードの場合:

sum += a[i];

マイクロは以下を生成する必要があります。

sum += function_call(a,i);

現在のソリューション。次のマクロに置き換えa[i]て使用 できることがわかりました。a(i)

#define a(i) function_call(a,i)

ただし、元のコードを変更したくありません。マクロを追加したいだけです。

質問。巧妙なマクロ定義でこれを達成できますか? どんなアイデアでも大歓迎です。

注意: C 構文を使用する必要があります。

4

1 に答える 1

2

いいえ。C プリプロセッサは、どんなに賢くても、演算子のオーバーロードを行いません。

入力の[]文字は括弧内にないため、マクロ引数の一部ではなく、英数字ではないため、マクロ名の一部ではありません。マクロ名またはマクロ引数ではないものはすべて、プリプロセッサによって渡されます。プリプロセッサはそれさえ知らず'['']'一致するペアです。

于 2013-10-08T14:20:37.447 に答える