C 使用但设置可变警告处理
我有以下代码,在使用gcc-4.6编译它时,我得到警告: 警告:变量“状态”已设置但未使用[-Wunused但已设置变量] 什么时候调试_ 没有设置标志,我收到警告。C 使用但设置可变警告处理,c,gcc,gcc-warning,C,Gcc,Gcc Warning,我有以下代码,在使用gcc-4.6编译它时,我得到警告: 警告:变量“状态”已设置但未使用[-Wunused但已设置变量] 什么时候调试_ 没有设置标志,我收到警告。 有什么办法可以绕过这个警告吗?您可以用\ifdef子句围绕状态的变量声明 #ifdef _DEBUG_ status_t status #endif 编辑:您还必须环绕通话: #ifdef _DEBUG_ status = pthread_rwlock_unlock(&p_lock->lock);
有什么办法可以绕过这个警告吗?您可以用
\ifdef
子句围绕状态的变量声明
#ifdef _DEBUG_
status_t status
#endif
编辑:您还必须环绕通话:
#ifdef _DEBUG_
status = pthread_rwlock_unlock(&p_lock->lock);
#else
pthread_rwlock_unlock(&p_lock->lock);
#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。您可以将断言
宏更改为:
#if defined (_DEBUG_)
#define ASSERT assert
#else /* _DEBUG_ */
#define ASSERT( exp ) ((void)(exp))
#endif
如果表达式没有副作用,那么它仍然应该被优化,但它也应该抑制警告(如果表达式确实有副作用,那么在调试和非调试构建中会得到不同的结果,这是您不希望的!)。如果要这样做,那么您可以使用\u属性(未使用))
声明上的注释。副作用是什么意思?@alnet:具有副作用的表达式是指改变某些内容的表达式,例如,ASSERT(i++)
。我现在有一个相关的问题:)不幸的是,/usr/include/assert.h(至少在我的平台上)定义了assert(exp)((void)0)
,这意味着exp
被丢弃,您仍然会得到警告。
#if defined (_DEBUG_)
#define ASSERT assert
#else /* _DEBUG_ */
#define ASSERT( exp ) ((void)(exp))
#endif