using #defines when you can instead be using constants and inline functions will cause you no end of grief eventually. If you prefer it then you deserve all the debugging hours you get.Ill be in the pub!
Another big use for the preprocessor is conditional compilation which allows you to build one source that targets many different platforms.
The preprocessor is a necessary evil in c++ but its "bugginess" need not be a problem with careful and judicious use. Never prefer #defines to constants and never prefer macros to inline functions and you wont go far wrong.