Первый вызовет ошибку компиляции.Макросы видны с точки их определения.
То есть первый эквивалентен:
//ONE
#define FOO 23
const int 23= 42; //which would cause compilation error
А второй такой:
//TWO
const int FOO = 42;
#define FOO 23 //if you use FOO AFTER this line, it will be replaced by 23
Так какмакросы тупые, в C ++ const
и enum
предпочтительнее макросов.Смотрите мой ответ здесь, в котором я объяснил, почему макросы плохие, и const
и enum
- лучший выбор.