配列の要素アクセス
GCCでは、アドレスを取得できない配列に対しても、添字付けを行うことが出来る。
アドレスを取得できない配列には、以下の二つがある。
- register修飾されているもの。
- 関数の戻り値である構造体のメンバであるもの。
この拡張は[]で要素アクセスする場合にのみ利用できる。*や->によるアクセスは出来ない。
#define N 2 struct foo { int mem[N]; }; struct foo bar(void); int main() { register int baz[N]; printf("%d\n", baz[0]); /* baz[0] は標準Cでは不正 */ printf("%d\n", bar().mem[0]); /* bar().mem[0] は標準Cでは不正 */ return 0; }
GCC拡張について書くのは5ヶ月ぶりか。
久しぶりに書くと、以前書いた内容を忘れていて困る。
そのうち同じ内容で書きそうだ。