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

时间:2015-07-02 16:58:36

标签: c if-statement codeblocks

我对编码很新,我在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);

}

3 个答案:

答案 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语句将其与此相关联,因此您会收到错误。