You missed the definition of function int power (int base, int n)
which is given after your main ends on the next page of the book.
When you declare prototype of a function you need to define what it should do you just declared the power function and never defined that, that's why you got error.
Include the following definition, your code will compile the way you wants it to be.
int power (int base, int n) {
int i, p;
p = 1;
for (i=1; i<=n; ++i)
p = p*base;
return p;
}
Pre-edit answer
Now this is not relevant, but useful
I think you want to use function pow()
defined in math.h
.
double pow(double a, double b)
The C library function pow(double a, double b)
returns a
raised to the power of b
. This function returns a double value so to print that correct specifier will be "%lf"
.
In this case you just need to include header file
#include <math.h>
In your program.
There is no need to give function declaration int power(int m, int n);
The error you are having is due to giveing I as on of the parameter to pow()
because when you will compile your code (after including math.h
and using pow()
replacing i
with any integer numbers will compile your code and will give proper output.
printf("%lf %lf %lf\n", i, pow(2, 3), pow(3, 2));
This will give you proper result but when you compile it with
for (i=0; i<10; ++i) {
printf("%lf %lf %lf\n", i, pow(2, i), pow(-3, i));
}
It throws same error so I think pow()
takes only constants as input so it won't run in for
loop.
And if you don't want to include math.h
you can simply declare
extern double pow (double base, double exponent);
That will link correctly with the library code without using the math.h
include file, here is an example.
int main() {
extern double pow (double base, double exponent);
printf("%lf", pow(8.0, 8.0));
return 0;
}
For more on pow()
you can check man page on Linux i.e. man pow
.