Приоритет объявления #define против const - PullRequest
0 голосов
/ 10 сентября 2011

Может ли #define "перезаписать" константную переменную или наоборот?Или это приведет к ошибке компилятора?

//ONE
#define FOO 23
const int FOO = 42;

//TWO
const int FOO = 42;
#define FOO 23

Какое значение будет иметь FOO в обоих случаях, 42 или 23?

1 Ответ

8 голосов
/ 10 сентября 2011

Первый вызовет ошибку компиляции.Макросы видны с точки их определения.

То есть первый эквивалентен:

//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 - лучший выбор.

...