C,简单的 if else 语句上的调试器断点

C, debugger breakpoints on simple if else statement

我是编码新手,我正在 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);

}

你多了一个分号。

去掉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);
}

当你把;在 if 子句之后,它意味着 if 是空的 block.Therefore 无论语句是真还是假 if 旁边的语句总是 excecuted.So 你的代码

if ((u== 0x0) || (u==0x80000000) );
    return 1;

评估为

if ((u== 0x0) || (u==0x80000000) )
   {   //empty block
     }
    return 1;        //always excecuted

因此,永远不会执行 else 部分,编译器看不到将此 else 关联到的 if 语句,因此您会收到错误。

注意 所有 分号。比你想要的还要多