当在C程序中使用fabs,fmin,fmax时,如果不包含math.h,为什么编译器/链接器不报告错误?

时间:2015-01-22 07:44:41

标签: c visual-c++ math

在Visual Studio 2013中编译C程序时,以下内容可能会产生不同的结果:

#include <math.h>

void bar(void) {
    double f = fabs(-1.0);
    /* f is 1.0 */
}

void foo(void) {
    double f = fabs(-1.0);
    /* f is 0 */
}

和相同的代码段,不包括math.h 。省略include时,编译器不会报告错误,并假定fabs具有以下签名int fabs()

是否有强制编译器将此报告为错误甚至是警告?

1 个答案:

答案 0 :(得分:0)

在C中,默认情况下,如果没有声明,函数将返回类型int,因此如果没有math.h,它将假设fabs返回int,这就是你看到结果的原因。打开所有警告,您将看到有关隐式返回类型的内容

在VS2013中,即使没有提高警告级别,我也收到了以下警告

Warning 1   warning C4013: 'fabs' undefined; assuming extern returning int