2011-08-17 81 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