Constants allow you to specify a datatype, which is (usually) an advantage. Macros are much more flexible, and therefore can get you into much more trouble if you're not careful.
Best practice is to use constants as much as possible, and use #define only when you really need a macro, not just a named literal value.