マクロを展開して行をコメントアウトすることはできません。マクロ定義には、定義に続くコメントがあり、展開されていません。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__)