这是一个在线C编译器,gcc-7.2.0的故障吗?

时间:2018-01-05 18:04:43

标签: c online-compilation gcc7

在名为jdoodle的在线C编译器上,我尝试了以下简单的代码段:

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

int main(void)
{
    double f = 1.2;
    //printf("%f\n", ceil(f));
    printf("%f\n", ceil(1.2));
    return 0;
}

打印:

2.000000

这是我的预期。

但是当我将代码更改为:

printf("%f\n", ceil(f));  
//printf("%f\n", ceil(1.2));

编译器抱怨:

/tmp/ccv6kz5w.o: In function `main':
jdoodle.c:(.text+0x23): undefined reference to `ceil'
collect2: error: ld returned 1 exit status

man page for ceil()中相当简单明了,它将double变量作为唯一参数。

当我从7.2.0将编译器版本更改为5.3.0时,两个代码都已成功编译并生成了预期的输出。

为什么编译器的更新版本会抱怨呢?

如果编译器抱怨它是正确的,那么任何人都可以告诉我为什么ceil(f);会成为一段有问题的代码,这样gcc-7.2.0就不会认为它有效了,令人惊讶地分配了一个未定义的引用错误&#39;一个有效的库函数?

更新:我尝试使用带有C-GCC6.3的codechef online compiler相同的代码段,它编译得很好并生成预期的输出。

1 个答案:

答案 0 :(得分:1)

man page for ceil(3)文件:

  

您需要#include <math.h>

你应该

  

-lm的关联。

您忘记配置在线编译器以链接-lm;或许你正在使用的那个人不提供这样的选择。

我建议您在自己的计算机上进行编译。