マクロを展開して行をコメントアウトすることはできません。マクロ定義には、定義に続くコメントがあり、展開されていません。IIRCには、トークンの貼り付けを使用して//
作成することはできないという規則があります。//
可能であっても、展開してもマクロがコメントを開始するわけではありません。基本的に、マクロを使用してコメント構文を変更することはできません。
あなたができること:
#if DO_NOTHING_MODE
#define FOO(ARG1)
#else
#define FOO(ARG1) ARG1
#endif
次のように使用します。
#define FUNCTION_LIKE_MACRO(ARG1, ARG2) \
required line; \
FOO(optional line;) \
より一般的なイディオムは、行全体ではなく、式を引数として受け入れるようにマクロを設計することです。
#if DO_NOTHING_MODE
#define FOO(ARG1) ((void)0)
#else
#define FOO(ARG1) (ARG1)
#endif
のように使用しますFOO(optional line);
いずれにせよ、マクロ引数にコンマが含まれている場合、呼び出し元はそれらを括弧FOO((1,2))
で囲む必要がありますが、C99ではFOO
可変個引数マクロを作成することでそれを回避できます。
#define FOO(...) (__VA_ARGS__)