函数 abs 的隐式声明 - gcc-5.1.0
Implicit declaration of function abs - gcc-5.1.0
使用 gcc-5.1.0 编译以下代码会产生警告:
warning: implicit declaration of function ‘abs’ [-Wimplicit-function-declaration]
代码:
#include <stdio.h>
#include <math.h>
int main (void)
{
printf ("%d\n", abs (-1));
return 0;
}
我用 gcc-4.9.2 编译了相同的代码,它没有产生任何警告。
abs()
函数是在 <stdlib.h>
中声明的,您没有包含它。
GCC 4.9.2 没有抱怨,因为默认的编译模式是 C89/C90 (-std=gnu89
) 并且函数在 C89 中使用之前不需要声明,只要它们返回一个int
,但默认编译模式在 GCC 5.1.0 中更改为 C11 (-stdd=gnu11
)(请参阅 release notes)并且在 C11 中函数必须在它们被调用之前声明(或定义)使用过。
尝试在您的代码中包含 <stdlib.h>
。 abs()
函数在 <stdlib.h>
中定义
使用 gcc-5.1.0 编译以下代码会产生警告:
warning: implicit declaration of function ‘abs’ [-Wimplicit-function-declaration]
代码:
#include <stdio.h>
#include <math.h>
int main (void)
{
printf ("%d\n", abs (-1));
return 0;
}
我用 gcc-4.9.2 编译了相同的代码,它没有产生任何警告。
abs()
函数是在 <stdlib.h>
中声明的,您没有包含它。
GCC 4.9.2 没有抱怨,因为默认的编译模式是 C89/C90 (-std=gnu89
) 并且函数在 C89 中使用之前不需要声明,只要它们返回一个int
,但默认编译模式在 GCC 5.1.0 中更改为 C11 (-stdd=gnu11
)(请参阅 release notes)并且在 C11 中函数必须在它们被调用之前声明(或定义)使用过。
尝试在您的代码中包含 <stdlib.h>
。 abs()
函数在 <stdlib.h>