我在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?)但是我想知道为什么会破坏它的方式
答案 0 :(得分:10)
您没有包含声明<stdlib.h>
的{{1}}。
这意味着调用abs
,编译器假定某处有abs( 1.5 );
函数,它将生成调用它的代码。
参数不匹配(int vs double),因此您将获得未定义的行为。
答案 1 :(得分:6)
abs
在stdlib.h
中声明。只需加入它。
您的编译器应该抱怨未声明abs
。如果没有,请添加合适的标志或开关。