在我编写的一个代码中看到
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’
为什么呢? 我怎么能删除这个?
答案 0 :(得分:4)
将i
的声明放在您实际使用它的{}
内。如果你有C99则更好,在for(int i = 0, i < bound; ++i)
答案 1 :(得分:1)
定义LITTLE
或BIG
。我怀疑当定义其中一个符号时,许多编译器会对此代码发出警告。如果您仍然收到警告,则可以将第二个#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
完美运作......