C++ define expression evaluation -
this question has answer here:
- the need parentheses in macros in c 8 answers
suppose have expression:
#define cube(x) x * x * x and call it:
int n = 3, v; v = cube(n + 1); // v = 10 v = cube((n + 1)); // v = 64 v = cube(n); // v = 27 so question is: why first operation not make v = 64?
macros not evaluated (in sense of common interpretation of evaluation), expanded @ compile time.
before file compiled, there program called c preprocessor replaces macro invocation literally/textually , prepares file actual compilation, macro
#define cube(x) x * x * x when this
v = cube(n + 1); is replaced (expaned correct term)
v = n + 1 * n + 1 * n + 1; // simplifies v = n + n + n + 1; // , again v = 3 * n + 1; which n = 3 gives 10 observed result.
note, when add parentheses
v = cube((n + 1)); then, expansion is
v = (n + 1) * (n + 1) * (n + 1); which expect cube() do, prevent should redefine macro this
#define cube(x) ((x) * (x) * (x)) if using gcc try
gcc -e source.c and check result verify how macro expanded.
Comments
Post a Comment