Я кодирую под GNU / Linux Debian 8.5
У меня простая программа.
Если я скомпилирую это с gcc prog.c
, все в порядке!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main(int argc, char const *argv[]) {
float _f = 3.1415f;
floor(_f);
ceil(_f);
return 0;
}
Бад, если я добавлю pow()
, он говорит, что не может найти pow
, и мне нужно добавить gcc prog.c -lm
, чтобы все было правильно.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
int main(int argc, char const *argv[]) {
float _f = 3.1415f;
floor(_f);
ceil(_f);
pow(_f, 2);
return 0;
}
Если я прав, pow()
, ceil()
, floor()
все из <math.h>
?
Так почему же floor()
и ceil()
не выдают ошибку компиляции, а pow()
делает это без -lm
флага?
-lm
параметр компилятора - person phuclv   schedule 20.08.2016floor
иceil
не нужны-lm
, в отличие отpow
. - person melpomene   schedule 20.08.2016libm
.math.h
просто предоставляет прототипы, чтобы компилятор понимал, о чем говорит ваш код. В конце концов, компоновщик связываетlibm
, как сообщает параметр-lm
. - person alk   schedule 20.08.2016