函数 abs 的隐式声明 - gcc-5.1.0

Sha*_*zad 4 gcc gcc-warning

使用 gcc-5.1.0 编译以下代码会产生警告:

warning: implicit declaration of function ‘abs’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

代码:

#include <stdio.h>
#include <math.h>

int main (void)
{
  printf ("%d\n", abs (-1));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用 gcc-4.9.2 编译了相同的代码,它没有产生任何警告。

Jon*_*ler 5

abs()函数是在<stdlib.h>您未包含的情况下声明的。

GCC 4.9.2 没有抱怨,因为默认编译模式是 C89/C90 ( -std=gnu89) 并且函数在 C89 中使用之前不需要声明,只要它们返回一个int,但默认编译模式更改为 C11 ( -stdd=gnu11)在 GCC 5.1.0(参见发行说明)和 C11 中的函数必须在使用前声明(或定义)。