Это очень интересное поведение и хороший пример обучения.
Чтобы решить вашу проблему, добавьте
-lm
в командную строку gcc (при условии, что вы используете gcc).Это говорит компилятору ссылаться на математическую библиотеку.
Кажется, что происходит, если вы используете
pow(2.0, 3);
, то компилятор понимает, что это выражение вычисляется как константа,и выполняет простую подстановку.
Таким образом, библиотечная функция не должна вызываться.