3 ms·
There's another pitfall: it evaluates a parameter twice. Imagine calling SQ(func_with_side_effects()). If you can assume a compiler with statement expressions
by throwaway3neu94 5y ago
There's another pitfall: it evaluates a parameter twice. Imagine calling SQ(func_with_side_effects()).
If you can assume a compiler with statement expressions and typeof (gcc, clang, probably icc in this case):
#define SQ(x) ({ typeof(x) x_ = (x); x_ * x_ })
If not (MSVC++) then best of luck.
Anyway I 100% agree people way, way overuse macros. Very often a static inline function is a better trade-off.