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
或者您可以关闭错误消息。