マクロは、実際のコンパイルが開始される前に処理されます。これらは、プリプロセッサがテキスト (コード) を編集する方法のルールにすぎません。
CMD_MAP(foo)
展開されfoo(READ, NETFN_SE, 0x01, 1) foo(WRITE, NETFN_SE, 0x02, 8)
てからコンパイルされます。
バックスラッシュは、マクロが次の行に続くことをプリプロセッサに伝えるだけです。
/編集: マクロは、ドイツのように 'k' ではなく 'c' で記述されます ;)
/Edit2: マクロ関数の基本ガイド
マクロの基本的な構文は次のとおりです。
#define MAKRO_NAME(argument1, argument2, ...) <definition of replacement-text>
次の簡単な例を見てください。
#define GET_A(val) val.a
この背後にある原則は、マクロを「呼び出す」ときに、「val.a」の val が括弧内にあるものに置き換えられるということです。したがって、コードに次のように記述すると、次のようにint x = GET_A(someObject);
展開 (プリコンパイル) されint x = someObject.a;
ます。
#define GET_SOMEVAL(obj, val) obj.val
//...
int x = GET_SOMEVAL(myObject, myVal);
次のように展開されます。int x = myObject.myVal;
ご覧のとおり、これらは単なるテキスト ベースの置換であり、プリプロセッサは C++ の文法や構文について何も知りません。マクロは、関数呼び出しなどで何もする必要はありません。テキストを置き換えるだけで機能します。マクロにはもう少し (暗い) 魔法がありますが、これで十分です。
質問に戻る: プリプロセッサは、書き込み時に「F」を括弧内に入れるものに置き換えるだけですCMD_MAP(this here replaces F)