К сожалению, я больше не использую Visual C ++ (и поэтому не могу убедиться, что это работает), но можете ли вы попробовать это?
#define MY_CALL(FUN, ...) \
if(prepare(x, y)) { \
int fail[] = {0,} \
FUN(__VA_ARGS__); \
}
При использовании gcc 4.2 и {0,}
, и {0}
разрешено в этом контексте, поэтому, если запятая удаляется или нет, это не имеет значения.Однако я не уверен, является ли это общепринятым в спецификации, обычно реализуемым расширением или чем-то специфичным для gcc.
Если синтаксис {0,}
равен , разрешенному Visual C ++,тогда, надеюсь, это решит вашу проблему (при условии, что я правильно понимаю, что самая последняя запятая перед __VA_ARGS__
- это то, что неправильно удаляется, независимо от того, где оно появляется в синтаксисе).