Использование функции pow() выбрасывает опорную ошибку undefined в C

Почему в C:

работает следующий бит кода:
int res = pow(2, 3);
printf("%d\n", res);

в то время как это другое не делает?

int a = 2;
int b = 3;

int res = pow(a, b);
printf("%d\n", res);

Даже если я попробую

double a = 2;
double b = 3;

double res = pow(a, b);
printf("%f\n", res);

Я получаю

undefined ссылка на `pow '

Что я делаю неправильно?

Ответ 1

Когда это работает, это потому, что вычисление было выполнено самим компилятором (и включено в двоичный файл, как если бы вы его записали)

printf("8\n");

Когда это не работает, это потому, что функция pow включена в математическую библиотеку, а математическая библиотека по умолчанию не связана с вашим двоичным файлом.
Чтобы связать математическую библиотеку, если ваш компилятор gcc, используйте

gcc ... -lm ...

С другими компиляторами должно быть одинаково:)
но прочитайте документацию

Ответ 2

undefined reference to 'pow' звучит как ошибка компоновщика. Вы не связываетесь в математической библиотеке, даже если вы введете функцию pow, включив <math.h>.

С помощью gcc используйте параметр командной строки -lm для ссылки в math lib.

Ответ 3

Используйте это как

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

int main(void)
{
  for(int i = 1; i < 5; i++)
     printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));  
  return 0;
}

Вывод:

pow (3.2, 1) = 3.200000

Ответ 4

undefined ссылка на `pow '

поскольку мощность для любого числа должна иметь целочисленное значение как мощность

pow(x,y)
where, x must be real and y must be a whole number