Время от времени возникает необходимость в операторе no-op в С++. Например, при реализации assert()
, который отключен в конфигурации без отладки (см. Также этот вопрос):
#ifdef _DEBUG
#define assert(x) if( !x ) { \
ThrowExcepion(__FILE__, __LINE__);\
} else {\
//noop here \
}
#else
#define assert(x) //noop here
#endif
До сих пор у меня сложилось впечатление, что правильным способом является использование (void)0;
для no-op:
(void)0;
однако я подозреваю, что он может вызывать предупреждения для некоторых компиляторов - что-то вроде C4555: expression has no effect; expected expression with side-effect
Предупреждение Visual С++, которое не выбрано для данного конкретного случая, но выдается, когда нет нажатия на void
.
Универсально ли он переносится? Есть ли лучший способ?