プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

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",
};