我在编译C源代码时遇到了警告gcc 4.6.1.
warning: variable set but not used [-Wunused-but-set-variable]
Run Code Online (Sandbox Code Playgroud)
我提到了这个链接Wunused但是可以确切地知道导致这个警告的原因.有谁能告诉我更多细节是什么导致了这个警告,我们怎么能摆脱它?
[编辑]我有以下代码片段.编译显示上述警告.你能建议我怎么纠正它?
test_function(){
BOOL BoolTest;
BoolTest = test_fucntion2();
#ifdef CHECK
if (!BoolTest) {
misc_StartErrorReport();
misc_ErrorReport("\n test_function2: Input not indexed.\n");
misc_FinishErrorReport();
}
#endif
//
BoolTest is no more used below it.
// }
Run Code Online (Sandbox Code Playgroud)
您需要在声明和初始化周围包含预处理器保护BoolTest:
test_function()
{
#ifdef CHECK
BOOL BoolTest = test_function2();
#else
test_function2();
#endif
#ifdef CHECK
if (!BoolTest) {
misc_StartErrorReport();
misc_ErrorReport("\n test_function2: Input not indexed.\n");
misc_FinishErrorReport();
}
#endif
Run Code Online (Sandbox Code Playgroud)
(这假设您仍然想要调用,test_function2()即使CHECK未定义,可能是因为它的副作用 - 如果没有,那么您不需要该#else部分,您可以将两个#ifdef块合并为一个).
设置变量就是给它赋值(可能是隐式的)
int main(void) {
int local1, local2;
local1 = 0; /* local1 set to 0 */
local2 = 0; /* local2 set to 0 */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的程序中,两个变量都设置了一个值,但没有使用它们。如果我将第二行替换为
int local2 = local1;
Run Code Online (Sandbox Code Playgroud)
现在我已经使用了local1变量——警告应该只有 1。
要消除警告,请从代码中删除该分配。这可能反过来会产生其他警告......:)