正直日記



2005/11/14

_ 日記に見せかけた質問ですから!(;´Д`)
日記に見せかけた質問ですから!(;´Д`)
_ 初めてのC からやり直したほうがいいか?
配列へのポインタを含む構造体の初期化をしたいんだけど
static const struct {
  int x, y;
  int size;
  int *data;
} Table[] = {
  { 0, 2, 3, {MAPCHIP_01, MAPCHIP_02, MAPCHIP_03} },
};
みたいな初期化って、やっぱり出来ないのかね。文字列定数のように、無名 配列定数に対するポインタが勝手に生成されてくれないかなーとか期待した んだけど、駄目?そこをなんとかお願いしますよ。
_ お汁娘屋かと思ったやん
http://rko.jp/img/nes/musashi_no_bouken/index.html

ここの画像集に触発されて(65535両であんなことになるとは!)ムサシの
冒険をやり始めたら止まらなくなって最後までプレイしてしまった。そして
スタッフロールの

    GRAPHIC DESIGNER
     GINGA TEIOU
       ACKY

という記述によって、点と点が繋がり線となって、そして、よくよく見直し
てみたら点のまんまだった。

SaTa. > 俺的解釈で澄int値を格納する領域が必要。  (2005/11/15 12:06:44)
> その格納する領域をコンパイラが勝手に確保しといてくれないかと。やっぱ無理すかね。うわいかん、堂々巡りしそうだ。  (2005/11/16 02:26:54)
SaTa. > あとで、ふと気が付いたけど、int * じゃなくて int [] じゃだめですか?ポインタにする理由が思いつきません。  (2005/11/16 10:22:27)
>
データが一つだけならそうするだろうけど、複数あると配列のサイズが
まちまちになって破綻すると思ったのでポインタにしました。

static const struct {
u8 x, y;
u8 data[];
} StringTable[] = {
{ 0, 1, "ab" },
{ 0, 2, "cdef" },
{ 0, 3, "ghi" },
};

をコンパイルすると(gccでコンパイル出来たのでビックリした)

.align 2
.type StringTable, %object
.size StringTable, 12
StringTable:
.byte 0, 1
.ascii "ab\000"
.byte 0, 2
.ascii "cdef\000"
.byte 0, 3
.ascii "ghi\000"

こうなるみたい。これは破綻しますよね。

うーん、文字列リテラルならポインタの初期化にラベル使ってくれるんだけどなぁ。
諦めて、int data[MAX_DATA_SIZE] と宣言すべきか。
 (2005/11/17 04:41:06)

最新
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12