2011-09-10 7 views
0

#defineはconst変数を "上書き"することができますか?それとも、コンパイラエラーにつながるでしょうか?#defineとconst宣言の優先順位

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

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

どちらの場合でもFOOにはどのような価値がありますか?

+0

最も簡単な方法は、'#が何かをdefine'後は単に検索+は、すべての行に検索を交換しています。 – Schnommus

答えて

8

最初にコンパイルエラーが発生します。マクロは、その定義の点から見ることができます。

//ONE 
#define FOO 23 
const int 23= 42; //which would cause compilation error 

2つ目は、このです:マクロはCで、ダムであるので

//TWO 
const int FOO = 42; 
#define FOO 23 //if you use FOO AFTER this line, it will be replaced by 23 

++ constenumはマクロよりも好まれる最初のものと等価である

。ここで私の答えを見てください。なぜマクロが悪いのかを説明しました。constenumが良い選択です。

関連する問題