为什么abs(1.5)在ideone.com上返回0而不是1或2?

时间:2014-03-28 13:06:58

标签: c

我在ideone.com上尝试了以下测试

(注意:我的本地机器不会出现此问题)

#include <stdio.h>

int main(void) {
    float f = abs( 2 );   printf( "%f \n", f ); // 2.000000
    float g = abs( 1.5 ); printf( "%f \n", g ); // 0.000000

    return 0;
}

abs的原型是&#39; int abs(int)&#39;

因此我希望g返回1或2;我希望&#39; 1.5&#39;要转换为整数。

这可以在ideone.com上展示:http://ideone.com/reyITY

有人可以解释这种行为吗?

PS我知道我应该使用fabs(或fabsf?)但是我想知道为什么会破坏它的方式

2 个答案:

答案 0 :(得分:10)

您没有包含声明<stdlib.h>的{​​{1}}。

这意味着调用abs,编译器假定某处有abs( 1.5 );函数,它将生成调用它的代码。

参数不匹配(int vs double),因此您将获得未定义的行为。

答案 1 :(得分:6)

absstdlib.h中声明。只需加入它。

您的编译器应该抱怨未声明abs。如果没有,请添加合适的标志或开关。