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



在一个名为jdoodle的在线C编译器上,我尝试了下面的简单片段:

#include<math.h>
#include<stdio.h>
int main(void)
{
    double f = 1.2;
    //printf("%fn", ceil(f));
    printf("%fn", ceil(1.2));
    return 0;
}

它打印:

2.000000

这是我所期望的。

但是当我将代码更改为:

printf("%fn", ceil(f));  
//printf("%fn", ceil(1.2));

编译器抱怨:

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

从手册页中可以ceil()相当简单和清楚地看出,它以double变量作为唯一的参数。

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

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

如果编译器抱怨它是正确的,谁能告诉我为什么ceil(f);会是一段有问题的代码,以便 gcc-7.2.0 不认为它是有效的,令人惊讶地将"未定义的引用错误"分配给有效的库函数?

更新:我用 C-GCC6.3 的 codechef 在线编译器尝试了相同的代码片段,它编译良好并生成预期的输出。

ceil(3( 的手册页记录了:

你需要#include <math.h>

你应该

-lm链接。

你忘了配置你的在线编译器与-lm链接;也许你正在使用的那个不提供这样的选项。

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

最新更新