複数行のプリプロセッサマクロの作成方法私は1行を作る方法を知っています:
#define sqr(X) (X*X)
しかし、私はこのようなものが必要です:
#define someMacro(X)
class X : public otherClass
{
int foo;
void doFoo();
};
これを機能させるにはどうすればよいですか?
これは単なる例であり、実際のマクロは非常に長い場合があります。
あなたが使う \
行継続エスケープ文字として。
#define swap(a, b) { \
(a) ^= (b); \
(b) ^= (a); \
(a) ^= (b); \
}
編集:@abelenkyがコメントで指摘したように、\
文字行の最後の文字でなければなりません。そうでない場合(後で空白であっても)、その後の各行に混乱するエラーメッセージが表示されます。
マクロをバックスラッシュ(\
)各行の最後:
#define F(x) (x) \
* \
(x)
ご注意ください Kerrek SBと共同依存者が指摘したように、それは受け入れられた答えで指摘されるべきでしたが、 常に 引数を中括弧で囲みます。 sqrの例は、CompSciコースで教えられている簡単な例です。
問題は次のとおりです。「sqr(1 + 5)」と言ったときに何が起こるかを定義した場合、 「1 + 5 * 1 + 5」または11を取得します
中括弧を正しく配置すると、#define sqr(x) ((x)*(x))
((1 + 5)*(1 + 5))または36 ...美しいものが得られます。
Ed S.は「スワップ」で同じ問題を抱えています
\
でエスケープすることにより、行末で改行をエスケープする必要があります。
#define sqr(X) \
((X)*(X))