+ 1
Can any one explain how macros in C works....?
I have questions regarding this way of using MACRO, #define sqr(x) x*x printf ("%d", sqr(3-5)); It print (-17)..... I concluded that it works in this way 3(-5)+3-5 = -17 But i can't understand why it's work this way, If i pass a single integer, like sqr(2) it return square of it, i.e. 4... Can any one explain first case....
2 ответов
+ 2
Macros are simple text substitutions. When the preprocessor processes a macro it just does the equivalence of a copy-paste operation. So the argument you pass in ( 3 - 5 ) is copied for each occurrence of 'x' in the macro.
x * x translates to 3 - 5 * 3 - 5 and because of precedence rules is interpreted as 3 - (5 * 3) - 5.
This is one of the common pitfalls of macros. Another similar one is sqr(n++) where it's translated n++ * n++ and you get a sequence point error but it isn't very obvious because you only incremented the value once. So it can be helpful if you think of macros as copy/paste operations, use them with care, and also capitalize them so you don't mistake them for functions.
It's a good idea to parenthesize the entire macro expression (it may not matter much here, but it's a good rule to follow to prevent weird parsing mistakes):
#define SQR(x) ((x) * (x))
The parenthesized arguments would've evaluated your expression as intended.
0
Gotcha....
Thanks a lot.... 👍🏻👍🏻