マクロの実際のパラメータにかっこを使用する必要がありますが、かっこはマクロパラメータを区切るカンマの動作を変更しているようです。C++マクロパラメータでかっこを使用するにはどうすればよいですか?
私のプリプロセッサに出力をテキストファイルにダンプして、それが何を作り出しているのか分かりました。
次に、動作を確認するための基本テストを行いました。
#define MACRO_TEST_1(X , Y) X && Y
MACRO_TEST_1 (A , B)
// Desired result: A && B
// Actual result: A && B
MACRO_TEST_1 ((C , D))
// Desired result: (C && D)
// Actual result: (C , D) &&
// Warning: "not enough actual parameters for macro 'MACRO_TEST_1'"
、第2パラメータに最初のパラメータにParentheseの開口部を添加し、閉鎖Parentheseの、部最初のパラメータのとしてコンマを治療するためのプリプロセッサを引き起こすように見える、したがってことを前提としていI は、の第2パラメータをまったく提供しませんでした。
これは、警告と、&&
の後には何も表示しないプリプロセッサの出力によって証明されます。
私の質問は、パラメータにカッコが入っていても、どのようにカンマがパラメータを区切っているかをプリプロセッサに伝えることができますか?
括弧やカンマをエスケープしようとしましたが、これは違いはありませんでした。
(ちょうどプリプロセッサの出力に挿入されたエスケープ文字と同じ結果、。)
これは本当にマクロで行う必要がありますか?どうして? –
@FrankPuffer詳細には触れません。古いコード(おそらく一時的なもの)で作業するのは奇妙な状況です。私はそこに括弧を入れるために使わなければならないことは、あまり知られていないかもしれないと思っています。それが私が時間のために必要なものです。 – Giffyguy
@FrankPuffer関数に同じ問題はありませんか? 'func(1,2)'は2つの引数であり、 'func((1,2))'はただ一つの引数です。 – Barmar