#define与const声明的优先级

时间:2011-09-10 08:27:43

标签: c++ variables const c-preprocessor overwrite

可以#define“覆盖”一个const变量,反之亦然?或者它会导致编译错误吗?

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

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

FOO在这两种情况下都有什么价值,42或23?

1 个答案:

答案 0 :(得分:8)

第一个会给出编译错误。从定义的角度来看,宏是可见的。

即,第一个相当于:

//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 ++中constenum比宏更受欢迎。请参阅我的回答,其中我解释了为什么宏不好,constenum是更好的选择。