このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

たくさんの文字列定数

#define FOO "This is foo"
#define BAR "I am Bar"
// 以下同様
// ...

のようなヘッダファイルをインクルードして使うと、マクロ定数はグローバルな名前でスコープも型も持ってないからよろしくない。確かに、そのとおり。

次のように変更する。

// hoge.h
// 文字列定数を宣言する
namespace hoge {
extern cons char *FOO;
extern cons char *BAR;
// ...
}
// hoge.cpp
// 文字列定数を定義する
namespace hoge {
const char *FOO =  "This is foo";
const char *BAR = "I am Bar";
// ...
}

とすると、ファイルが2つになって管理が大変。文字列を値とするenumがあるといいんだが、そんなのないし。

const使うメリットは、あちこちにリテラルが展開されるわけではなくて変数だから、バイナリ内部では文字列リソースが一箇所にまとまる、つうのがある。だが、現状だと、リテラル展開が問題になるほどのことはない。

どうしようかなー?