Wunused-but-set-variable警告处理

我有以下代码,并在使用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_标志,则会收到警告。 任何想法如何解决此警告?

您可以将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.

您可以使用#ifdef子句包围status的变量声明。

 #ifdef _DEBUG_ status_t status #endif 

编辑:你也必须围绕这个电话:

 #ifdef _DEBUG_ status = pthread_rwlock_unlock(&p_lock->lock); #else pthread_rwlock_unlock(&p_lock->lock); #endif 

或者您可以关闭错误消息。