どこかのだれかへ

職業ゲームプログラマ。気になったニュースのピックアップや開発日記などを書いています。

定数でdefine使ってる場所があって大変だった

とあるヘッダーファイルをインクルードしたら、Enumの定義の1つがエラーになった。
エラー内容的に、どうも定義が重複しているらしい。

でも名前空間結構深いし、名前空間の名前もユニークで、インクロードガードもある。重複することなんてあるのか? そんなことを思って調べたら、#defineで同じ名前の定数が定義されていました。

defineは、置き換え処理なので、名前空間なんて通用しません。
これで結構時間を無駄にしました。

C++ではdefineによる定数定義は非推奨なはずで、代わりにstatic const、C++11ならconstexprを使えばコンパイル時に適用されるのでこれを使うべき、これを実感しました。

せめてdefine使うなら絶対かぶらないような名前にしておいてくれていれば、こんなことにはならなかった。