Обработка предупреждения Wunused-but-set-variable
У меня есть следующий код, и при компиляции с GCC-4.6 я получаю предупреждение:
предупреждение: переменная "статус" установлена, но не используется [- 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
макрос to:
#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
EDIT: вы также должны окружить вызов:
#ifdef _DEBUG_
status = pthread_rwlock_unlock(&p_lock->lock);
#else
pthread_rwlock_unlock(&p_lock->lock);
#endif
или вы можете отключить сообщение об ошибке.