Это глюк с онлайн-компилятором C, gcc-7.2.0?
На онлайн-компиляторе C под названием jdoodle я попробовал этот простой фрагмент ниже:
#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
Это довольно просто и понятно из справочной страницы дляceil()
что требуется double
переменная как единственный аргумент.
Когда я изменил версию компилятора на 5.3.0 с 7.2.0, оба кода были скомпилированы успешно и сгенерировали ожидаемый результат.
Почему обновленная версия компилятора жалуется на это?
Если компилятор прав насчет этого, может кто-нибудь сказать мне, почему ceil(f);
будет проблематичным фрагментом кода, так что gcc-7.2.0 не считает его действительным, неожиданно присваивая "неопределенную ошибку ссылки" допустимой библиотечной функции?
Обновление: я попробовал тот же фрагмент с онлайн-компилятором codechef с C-GCC6.3, он прекрасно компилируется и генерирует ожидаемый результат.
1 ответ
Справочная страница для ceil(3) документ, который:
вам нужно
#include <math.h>
и что ты должен
Связать с
-lm
,
Вы забыли настроить онлайн-компилятор для связи с -lm
; возможно, тот, который вы используете, не предлагает такой опции.
Я рекомендую компилировать на своем компьютере.