警告:未使用的变量

时间:2011-08-17 13:28:33

标签: c warnings

在我编写的一个代码中看到

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;
 }

通过使用-Wall标志编译此代码,它显示

 warning: unused variable ‘i’      

为什么呢? 我怎么能删除这个?

5 个答案:

答案 0 :(得分:4)

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

中声明循环变量

答案 1 :(得分:1)

定义LITTLEBIG。我怀疑当定义其中一个符号时,许多编译器会对此代码发出警告。如果您仍然收到警告,则可以将第二个#ifdef更改为#else

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

答案 2 :(得分:1)

您需要定义BIG或LITTLE(如其他地方所述)。

为了在将来再次发生这种情况,您可以使用以下方法引发特定的编译时错误:

#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

答案 3 :(得分:0)

您不必声明迭代编号。只是在你的陈述中做。

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

}

答案 4 :(得分:0)

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

见BIG&amp; LITTLE是preposser flag&amp;它们是在编译时给出的。 当我用make文件编译我的项目时,我在编译时给出了这个标志,但在测试每个单独的文件时,我正在编译,如

gcc -Wall -c filename.c 

这是因为我没有给出任何标志,所以编译器会忽略那么多代码和我正在收到警告。

gcc -Wall -c -LITTLE filename.c 

完美运作......