アカウント名:
パスワード:
enumは0から順番に割り振られることが保証されてるので、そのまま配列indexに使えると思いますが…
// indexをIDとして定義enum{ ColorId_Info, ColorId_Warn, ColorId_Error,}ColorId; // 引きたい内容の構造体typedef struct{ int r, g, b, const char *name,}ColorInfo; // 引きたい内容の実態static const ColorInfo = colorInfos[] = { {0, 32, 64, "Info"}, {0, 64, 128, "Warn"}, {0, 128, 255, "Error"},}; // 以下、引く機能は概念コードsize_t getNumColorInfos(){ return sizeof
> > enum{> > ColorId_Info=0,> > ColorId_Warn=1,> > ColorId_Error=2,> > }ColorId;> と、明示的に割り当てた方が、対応がわかりやすいですかね。
構造体配列の方が連番になっていることが前提なので、明示的に割り当てると逆にトラブルの元じゃないですかね。うっかり数字を抜かしたり入れ替えてしまったりした場合に分かりにくい。
これに加えてさらに、C99で導入された配列初期化の拡張を使うと良いと思います。
// 引きたい内容の実態static const ColorInfo colorInfos[] = { [ColorId_Info] = {0, 32, 64, "In
C99の配列初期化の構文自体は知っていましたが、enum値を入れる発想はなかったです。
やはり対応関係が問題ですね。私は、構造体からインデックスを生成する、それもゼロから始まって抜けがないようなもの、という方向で考えています。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
enumはそのまま配列添字に使えます。 (スコア:1)
enumは0から順番に割り振られることが保証されてるので、そのまま配列indexに使えると思いますが…
Re: (スコア:0)
> > enum{
> > ColorId_Info=0,
> > ColorId_Warn=1,
> > ColorId_Error=2,
> > }ColorId;
> と、明示的に割り当てた方が、対応がわかりやすいですかね。
構造体配列の方が連番になっていることが前提なので、明示的に割り当てると逆にトラブルの元じゃないですかね。
うっかり数字を抜かしたり入れ替えてしまったりした場合に分かりにくい。
これに加えてさらに、C99で導入された配列初期化の拡張を使うと良いと思います。
// 引きたい内容の実態
static const ColorInfo colorInfos[] = {
[ColorId_Info] = {0, 32, 64, "In
Re:enumはそのまま配列添字に使えます。 (スコア:2)
C99の配列初期化の構文自体は知っていましたが、enum値を入れる発想はなかったです。
やはり対応関係が問題ですね。
私は、構造体からインデックスを生成する、それもゼロから始まって抜けがないようなもの、という方向で考えています。