Wunused-but-set-variable警告处理

aln*_*net 6 c gcc gcc-warning

我有以下代码,在用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); 
}
Run Code Online (Sandbox Code Playgroud)

如果未设置_DEBUG_标志,则会收到警告.任何想法如何解决此警告?

caf*_*caf 3

您可以将ASSERT宏更改为:

#if defined (_DEBUG_)
#define ASSERT       assert
#else                           /* _DEBUG_ */
#define ASSERT( exp ) ((void)(exp))
#endif   
Run Code Online (Sandbox Code Playgroud)

如果表达式没有副作用,那么它仍然应该被优化,但它也应该抑制警告(如果表达式确实有副作用,那么您将在调试和非调试版本中得到不同的结果,而您不会这样做)也不想要!)。