Wunused-но-переменная обработка предупреждения
У меня есть следующий код, и при компиляции его с помощью gcc-4.6 я получаю предупреждение:
предупреждение: переменная 'status' установлена, но не используется [-Wunused-but-set-variable]
#if defined (_DEBUG_)
#define ASSERT assert
#else /* _DEBUG_ */
#define ASSERT( __exp__ )
#endif
static inline void cl_plock(cl_plock_t * const p_lock)
{
status_t status;
ASSERT(p_lock);
ASSERT(p_lock->state == INITIALIZED);
status = pthread_rwlock_unlock(&p_lock->lock);
ASSERT(status == 0);
}
Когда флаг _DEBUG_ не установлен, я получаю предупреждение. Любые идеи, как я могу обойти это предупреждение?
3 ответа
Вы можете изменить свой ASSERT
макрос для:
#if defined (_DEBUG_)
#define ASSERT assert
#else /* _DEBUG_ */
#define ASSERT( exp ) ((void)(exp))
#endif
Если выражение не имеет побочных эффектов, оно все равно должно быть оптимизировано, но оно также должно подавлять предупреждение (если выражение имеет побочные эффекты, вы получите разные результаты в отладочных и не отладочных сборках, которые вы не ' тоже не хочу!)
Опция компилятора для отключения неиспользуемых переменных предупреждений -Wno-unused
, Чтобы получить тот же эффект на более детальном уровне, вы можете использовать диагностические прагмы, например:
int main()
{
#pragma GCC diagnostic ignored "-Wunused-variable"
int a;
#pragma GCC diagnostic pop
// -Wunused-variable is on again
return 0;
}
Это, конечно, не переносимо, но вы можете использовать нечто подобное для VS.
Вы можете окружить объявление переменной status
с #ifdef
пункт.
#ifdef _DEBUG_
status_t status
#endif
РЕДАКТИРОВАТЬ: Вы должны окружить вызов также:
#ifdef _DEBUG_
status = pthread_rwlock_unlock(&p_lock->lock);
#else
pthread_rwlock_unlock(&p_lock->lock);
#endif
или вы можете отключить сообщение об ошибке.