Какой переносимый способ реализовать оператор без операции в C ++?

Время от времени возникает необходимость в 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 .

Является ли оно универсальным переносимым? Есть ли лучший способ ?

26
задан Community 23 May 2017 в 12:09
поделиться

2 ответа

    inline void noop( ) {}

Самодокументирование

0
ответ дан 28 November 2019 в 07:06
поделиться

Как насчет do { } while(0)? Да, он добавляет код, но я уверен, что большинство современных компиляторов способны его оптимизировать.

8
ответ дан 28 November 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: