在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()
。
是否有强制编译器将此报告为错误甚至是警告?
答案 0 :(得分:0)
在C中,默认情况下,如果没有声明,函数将返回类型int
,因此如果没有math.h
,它将假设fabs返回int,这就是你看到结果的原因。打开所有警告,您将看到有关隐式返回类型的内容
在VS2013中,即使没有提高警告级别,我也收到了以下警告
Warning 1 warning C4013: 'fabs' undefined; assuming extern returning int