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