2011-08-17 131 views
1

在一个代码中看到我已通过编译此代码-Wall标志书面警告:未使用的变量

void my_function() 
{ 
INT32 i; /* Variable for iteration */ 
/* If system is little-endian, store bytes in array as reverse order */ 
#ifdef LITTLE 
    {  
    // i m using i for operating one loop 
    } 
    #endif 

/* If the system is big-endian, store bytes in array as forward order */ 
#ifdef BIG 
    { 
    // using i for loop 
    } 
    #endif 
return; 
} 

它显示

warning: unused variable ‘i’  

为什么呢? 我该如何删除它?

+0

哪个编译器? –

+0

线程型号:posix gcc版本4.5.1 20100924(Red Hat 4.5.1-4)(GCC) –

+0

你在哪里使用我? –

回答

0

嘿,我得到了答案......

看到BIG & LITTLE是preposser标志&他们在编译时给出。 当我编译我用make文件我给在编译时这个标志的项目,但在测试中的各个文件被当前编译像

gcc -Wall -c filename.c 

这是正在添加,因为我还没有给出任何标志,这样编译器会neglet那代码&的很大一部分,我得到警告。

gcc -Wall -c -LITTLE filename.c 

作品完美...

4

i的声明放在您实际使用它的{}的内部。更好的是,如果你有C99,在for(int i = 0, i < bound; ++i)

0

内声明循环变量你不必声明迭代号。只要在你的陈述中做到这一点。

for(int i = 0; i < 6; i++){ 
    // insert loop code here 

}

+0

我没有c99 –

+0

那么你有什么? –

+0

我需要遵循只是ANSI C –

1

通过定义要么LITTLEBIG。我怀疑许多编译器在定义这些符号之一时会对此代码给出警告。如果仍有警告,则可以将第二个#ifdef更改为#else

我没有在任何地方看到任何#endif - 大概是在真实的代码中出现的。

+0

sory我已经写了两个#endif仍然我得到这 –

+1

所以,你实际上已经定义小或大的地方? –

+0

我在编译时给这个标记 –

1

您需要定义无论大或小(如其他地方提到)。

为了制止这种在将来再次发生,您可以使用以下发出一个特定的编译时错误:

#if !defined LITTLE && !defined BIG 
#error You haven't defined one of your macro names 
#endif 

另外,无论是使用代码块由围绕着它,只有当你能包括i#if defined还有:

#if defined LITTLE || defined BIG 
INT32 i; 
#endif 

在这两种情况下,请注意使用关键字是#if#ifdef#ifndef

相关问题