Обработка предупреждения 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

или вы можете отключить сообщение об ошибке.