Macros in C++ are better avoided. They are unsafe, hard to debug, and may bloat your .exe files. C++ offers significantly better alternatives to them:
1. Function-like macros should be replaced with inline functions. Inline functions are safer since they allow type checking. Furthermore, they also support overloading and can be stepped into during debugging.
2. Constant-like macros should be replaced with const variables or enum types, both of which allow safe type checking and are easier to debug.
In other words, macros in C++ should be confined to conditional compilation solely.