我对编码很新,我在CodeBlocks中编辑一个简单的C函数。我在“else”旁边有一个红色错误点,我无法发现我的代码有任何问题,也许是我忽略的东西。请帮忙,谢谢!
int isZero (float f)
{
unsigned int u = *(unsigned int*)&f;
if ((u== 0x0) || (u==0x80000000) );
return 1;
else
return 0;
return (EXIT_SUCCESS);
}
答案 0 :(得分:3)
注意所有分号。有一个比你想要的还多。
答案 1 :(得分:2)
你那里有一个额外的分号。
从if ((u== 0x0) || (u==0x80000000) );
编译器将;
作为单个语句执行任何操作;并考虑if
块的内容。下一个语句是return 1;
,始终执行。当编译器看到else
时,它无法找到与其一致的if
,因为if
块已被第一个分号关闭。
编译器将其解析为
int isZero (float f)
{
unsigned int u = *(unsigned int*)&f;
if ((u== 0x0) || (u==0x80000000)
/* do nothing */;
return 1;
else /* what does this go with? */
return 0;
return (EXIT_SUCCESS);
}
答案 2 :(得分:1)
当你放一个;在if子句之后,它意味着if是一个空块。因此,如果该语句是真还是假,if旁边的语句总是被删除。所以你的代码
if ((u== 0x0) || (u==0x80000000) );
return 1;
评估为
if ((u== 0x0) || (u==0x80000000) )
{ //empty block
}
return 1; //always excecuted
因此,else部分永远不会被删除,并且编译器没有看到if语句将其与此相关联,因此您会收到错误。