以下は#define部分的に機能します。
#define OUT(x) \
if(x > 0) cout << "Hello "; \
if(x > 1) cout << x+1
OUT(1) << "message"; // OK
if(0) {
OUT(1) << "message"; // OK, nothing printed
}
if(0)
OUT(1) << "message"; // NO, printed anyway
なぜ機能しないのか理解しています(のみif(0)に適用されますif(x > 0))。
それを機能させる方法が見つかりません。定義に中括弧を入れることができないことを考慮してください。そうしないと、挿入演算子を使用できなくなります。