須藤です。

今日、Subversionの人たちにRubyバインディングがビルドできない
と言われて気付いたのですが、GCCの-ansiオプションをつけると拡
張ライブラリがビルドできません。

特に「-ansiオプションをつけてもビルドできるべき」とかいうので
はなく、-ansiオプションをつけてもビルドできるようにしたいの
かどうかが気になったのでこれを書いています。
(1.8.xはまだ引数宣言にK&Rも使っていたりして、ポータブルな書
き方を意識しているようにも見えるので)


手元の日本語のGCCのmanには以下のように書いていて、ruby.hの
「inline」がひっかかっていました。
(inlineは1.8.xにも1.9.xにもあります)

> -ansi  全ての ANSI 標準の C プログラムをサポートします。
>
>        このオプションは、GNU C が持つ ANSI C との非互換な機能を全て 排
>        除 します。例えば、asm, inline, typeof などのキーワードや、unix
>        や vax などの現在使用しているシステムを規定する定義済みマクロな
>        ど が抑制されます。さらに、好ましくなくかつほとんど使用されない
>        ANSI のトライグラフの機能を使用可能とし、さらに ‘$’ を識別子 の
>        一部として使用できないようにします。
>
>        代替キーワードである__asm__, __extension__, __inline__, __type‐
>        of__ は、 ‘-ansi’ が指定された場合でも使用することが可能です 。
>        も ちろん、これらを ANSI C プログラムで使用することが望ましくな
>        いのは当然ですが、‘-ansi’ をつけてコンパイルされる場合でも、 イ
>        ン クルードされるヘッダファイル中にこれらが記述できるということ
>        は有用です。 __unix__ や __vax__ などの代替定義済みマクロ は 、
>        ‘-ansi’  を指定する場合でも指定しない場合でも、利用可能となって
>        います。
>
>        ‘-ansi’ オプションは、ANSI 準拠でないプログラムを不必要に拒否す
>        る こ と は あ りません。もしこのような動作を行なわせたい場合に
>        は‘-ansi’に加えて‘-pedantic’オプションを指定する必要があります。
>
>        プ リプロセッサ定義済みマクロ __STRICT_ANSI__ が ‘-ansi’ オプシ
>        ョンを使用した際には定義されます。いくつかのヘッダファイルは 、
>        このマクロを識別して、ANSI 標準が望まない関数やマクロの定義を抑
>        制します。これは、それらの関数やマクロと同じ名前を別の目的で 使
>       用するプログラムを混乱させないようにするためです。