gcc 勉強会したい

今日、ちょっとソースを読む時間があったのですが、ひさしぶりに知らないgccの拡張記法にであいました。

int hoge [] = { [0..10] = 3 };

どうやら、これで配列のindexが0から10までを3にした配列になるようです。いやぁ、gccが独自に拡張記法をもっているって知らずに、いきなりであったらぎょっとしますね(僕は知ってて読んでぎょっとしましたが)。

それから、フリーソフトウェア徹底活用講座をてきとうに眺めていたんですが、gccは変数名に"$"を許してくれるみたいですね。なので、こんなコードも見事にコンパイルしてくれます。

$ cat add.c 
#include <stdio.h>
#define my int

my main()
{
    my $a = 4;
    my $b = 3;
    my $c = $a + $b;
    printf("%d + %d = %d\n",$a,$b,$c);
    return 0;
}
$ gcc -o add add.c 
$ ./add 
4 + 3 = 7

いやぁ、なんだか別の言語っぽくなってしまいますね(浅い知識)。

それにしても、gccってよく使うものであるのに知らないことが多すぎる。以前、勝手に関数をinlineにする(-finline-functions)のを知らなくて、ダンプ読んでいてはまったこともあるし。

それに、どういう機構でコンパイルされているのかも、少しは理解したいなぁ。以前、レッドハットのgccの内部機構の紹介を軽く眺めて、簡単に置いてけぼりにされてしまったのだけど、少しは理解できるようになりたいなぁ。(ちなみに、あろはさんのgcc のフロントエンド作る日記がヒットする。さすが、オメガブロガー)

一度、ちゃんとgccと向き合って勉強をしてみたいなぁ。他にgccを興味があるという方はいないかしら。