警告:内置函数log2的不兼容的隐式声明

JoM*_*oMP 0 c compiler-errors logarithm

所以我们在C中有这个程序,我们需要使用base-2对数函数,得到n的基数2的对数.这是代码:

#include <math.h>

int partSize(int n) {
    return log2(n);
}
Run Code Online (Sandbox Code Playgroud)

但是在编译时,它会给我们以下警告.

sim.c:在函数中partSize:sim.c:114:警告:内置函数的不兼容隐式声明log2

这是我们使用的命令

 gcc $file -o $name.out -lm 
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 7

这就是99.99999%的时间,当有人说"这个世界上可用的基本功能不起作用"时,他们就错了.这个基本打破的时间的一小部分,已经有一个军队在某个地方有干草叉.

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

int partSize(int n){
    return log2(n);
}

int main(int argc, char *argv[]) {
    int ret = -1;
    ret = partSize(16);
    printf("%d\n", ret);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

 > gcc -std=c99 a.c -o log2.out -lm
 > ./log2.out 
 > 4
Run Code Online (Sandbox Code Playgroud)

是的,它正在发挥作用.

在C中,使用先前未声明的函数构成函数的隐式声明.在隐式声明中,返回类型是int.因此,错误告诉您log2()未在代码中定义导致您未发布的代码中的某些问题.

当我跳过-lm我得到:

ac :(.text + 0x11):未定义引用`
log2'colle2:ld返回1退出状态

..看起来不对.好的,当我添加-lm但删除#include <math.h>我得到:

ac:在函数'partSize'中:
ac:5:5:警告:函数'log2'的隐式声明[-Wimplicit-function-declaration]

嘿,这是你的警告!所以你可能是正确的,-lm但是由于某些原因,你#include math.h有问题.可能是这样的:

  1. math.h不见了
  2. 你没有真正将它包含在文件中,是否在#def中并被编译出来?
  3. 您的math.h版本没有定义log2