C言語の仕様!?
GBAファイラーを作っていて困ったこと。
GBA開発はDevkitAdvanceに付属のARM用GCCを使って行っています。んで、ROM領域にメモリを割り当てるにはconst属性を使うわけですが、期待した結果にならない場合があります。例えば:
const char Foo[]="HogeHoge";
のような場合、FooはROM領域に割り当てられますが
const char *Foo[]={ "HogeHoge", "Yasuho", };
のような場合は、FooはROMではなく、内部RAM領域に割り当てられてしまいます。仕方ないので、
#define attrrodata __attribute__ ((section (".rodata"))) attrrodata const char *Foo[]={ "HogeHoge", "Yasuho", };
というようにすると、アセンブラはWarningを出すのですが、何とかROMに割り当てることが出来ます。
これって、C言語の仕様なのだろうか!?
ご存じの方、教えていただけると嬉しいです。
(6/13 追記)
通りすがりさんに教えていただきました。こういう書き方が出来るようです。
const char * const Foo[]={ "HogeHoge", "Yasuho", };