QA@IT

ANSI C チェッカーはないものか

3117 PV

最近、ruby 2.0.0devを gcc -ansi でコンパイルするようにフラグを弄った者です。

ところがこの指定はWindows(mingw等)やいくつかのUnix系環境で問題があり、どうやら筋が悪かったということらしく、後から他の人に回避コードをたくさん入れられてわりと凹んでいます。

ANSIチェックはgccでやらせずに専用のlintとかを使うべきだ、というふうに言われて、まあそれはそれで一理あるものの、問題はそのようなANSIチェックができるlintがなかなか見当たらないということにあります。

そこで伺いたいのですが、ANSI Cから逸脱したプログラム のみ を警告してくれるようなものはどこかにございませんでしょうか。

ポイント:

  • 静的解析でバグを見つけたいわけではなく、移植性の観点からANSI Cを逸脱しないようにするのが目的。
  • ライブラリ関数の引数の型がどうとかはrubyの側でどうにも対処できないのでそういうのを警告されても困るだけである。文法の誤りを回避できれば当面の用は足りる。
  • できればTravis CIで自動的にチェックさせたいのでTravisのVMでも動くものが好ましい。
  • (実績)gcc -ansiには難あり

よろしくおねがいします。

回答

gcc -ansi でコンパイルするが,結果を利用しない,というのはどうでしょうか.

具体的に Ruby だと,今凄いてきとーですが,こんな感じで.

Index: Makefile.in
===================================================================
--- Makefile.in (revision 36123)
+++ Makefile.in (working copy)
@@ -303,6 +303,7 @@

 .c.@OBJEXT@:
    @$(ECHO) compiling $<
+   $(Q) gcc -ansi -std=iso9899:199409 -S $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $<
    $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $<

最適化は不要なので,-O0 とかにするとか,.s の出力先を邪魔にならないようにするとか要りますが.

追記:中田さんに,-fsyntax-only というものがあると教えて貰いました.これでいけそう.

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。