NoName NoName - 4 months ago 32
C++ Question

Preprocessor behind the scenes, how does it interpret the following lines of code C++

So i'm using a preprocessing macro for this basic square function :

#define SQUARE(a) a*a

it is then passed to these functions, to perform these tasks respectively:

double f(double x) {
return SQUARE(x);
double g(double x) {
return SQUARE(1-x);
double h(double x) {
return 1/SQUARE(x);

with such functions, for g(x) and h(x) i'm getting results such as:

g(2) = -3, h(2) = 1
g(3) = -5, h(3) = 1
g(4) = -7, h(4) = 1

I have changed the functions to get their expected results, but I'm curious as to what is happening in the above functions to give me such strange results?


SQUARE(1-x) will be expanded to 1-x*1-x which is not correct at all.

It would be much better to use a function instead of a macro. A function only evaluates the parameter once.

double square(double a)
{ return a * a; }