内置函数logl

时间:2015-12-10 23:49:41

标签: gcc cygwin

当我编译这个简短的程序时

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

int main(void) {
        long double ld = logl(1L);
        printf("logl = %Lf\n", ld);
}

使用'gcc foo.c'我收到此错误消息

 $ gcc foo.c
foo.c: In function ‘main’:
foo.c:5:19: warning: incompatible implicit declaration of built-in function ‘logl’
  long double ld = logl(1L);

包含文件math.h包含在/usr/include/math.h

$ gcc -M foo.c
foo.o: foo.c /usr/include/math.h /usr/include/sys/reent.h \
 /usr/include/_ansi.h /usr/include/newlib.h /usr/include/sys/config.h \
....

logl()的原型在math.h中找到

$ grep logl /usr/include/math.h
extern long double logl _PARAMS((long double));

编译错误消息表明编译器无法找到 logl()的原型。

math.h中logl()的定义被这些ifndefs

包围
#ifndef _REENT_ONLY
#ifndef __math_6888
...
extern long double logl _PARAMS((long double));
...
#endif /* ! defined (__math_68881) */
#endif /* ! defined (_REENT_ONLY) */

我没有通过gcc的命令行参数定义任何这些符号。 因此,我希望gcc能够找到logl()的原型,但由于某种原因它无法使用。

另外,如果将程序更改为使用log(1)而不是logl(1L),则没有 关于'不兼容的隐式声明'的编译器错误。 gcc能够 在math.h中找到log()但不是logl()。 log()在同一个内部声明 围绕logl()的ifndefs。

我正在使用gcc版本4.9.3的cygwin进行编译。

0 个答案:

没有答案