Windows版splintのVC6&秀丸連携の設定方法まとめ

フリーのC言語用静的コード解析ツールのsplint。いざ使ってみようと思ったのですが、インストールの方法を日本語で解説しているページが見つられませんでした。(あまり使われていないのかな?)
なので四苦八苦してたどり着いたセットアップの手順を自分のメモも兼ねてココに公開します。よければご参考に。

★ 静的コード解析とは

コンピュータのソフトウェアの解析手法の一種であり、実行ファイルを実行することなく解析を行うこと。逆にソフトウェアを実行して行う解析を動的プログラム解析と呼ぶ。静的コード解析はソースコードに対して行われることが多く、少数ながらオブジェクトコードに対して行う場合もある。

静的コード解析 - Wikipedia
★ splint本体のインストール

1.splint-3.1.1.win32.zipをダウンロード(⇒splint-3.1.1.win32.zip
2.1のzipをフォルダ構成を保持したまま解凍し、C:\のルートに置く
C:\splint-3.1.1\bin\splint.exeがあればOK!)
3.以下29行をC:\splint-3.1.1\splintrc.txtという名前で保存する*1

;====================
; * mode
;====================
-weak               ;   ゆるい
;-standard           ;   ややゆるい
;-checks             ;   ややきびしい
;-strict             ;   きびしい
 
;====================
; * include directory
;====================
-I.

;「C:\splint-3.1.1\」以外にインストールしたときは、下記2行のコメントを外してパスを指定する
;+larchpath    C:/PROGRA~1/splint-3.1.1/lib
;+lclimportdir C:/PROGRA~1/splint-3.1.1/imports

;====================
; * option (format)
;====================
-linelen 9999       ;   なるべく折り返さない
+forcehints         ;   毎回ヒントを出力する(デフォルトは初回のみ)
-showcolumn         ;   エラー位置は行数のみ出力(桁数を出力しない)

;+showsummary        ;   エラーの数一覧も出力

;====================
; * option (to ignore)
;====================

以上で本体のインストール終了です。

Microsoft Visual C++ 6.0 との連携設定

1.VC6を起動し、メニューのツールカスタマイズツールタブのメニュー項目の一番下の空欄部分をクリック
2.更にクリックするとテキスト入力が可能になるので splint と入力
3.コマンドに C:\splint-3.1.1\bin\splint.exe、引数に "$(FilePath)" +f C:\splint-3.1.1\splintrc.txt 、実行時のディレクトリに $(FileDir) を入力し、
アウトプットウィンドウを使用のチェックをONにしたら閉じる
20100301201232

これでVCの設定終わり。あとはVCでソースファイルを開き、メニューのツールsplintをクリックすれば実行できます。
通常のコンパイル時と同様に、警告の内容とそのファイル位置がアウトプットウィンドウに表示されますので、ダブルクリックすれば該当箇所へタグジャンプが可能です。

秀丸との連携設定(使っている秀丸のバージョンはVersion 7.11です、一応)

1.下記の1行を秀丸のインストールフォルダ(Hidemaru.exeがある場所)にsplint.macという名前で保存する

run "C:splint-3.1.1/bin/splint.exe \"%f\" +f C:/splint-3.1.1/splintrc.txt";

2.秀丸を起動し、メニューのマクロマクロ登録をクリック
3.マクロ1のところへ、タイトル:splint、ファイル名:splint.mac(1で保存したファイル名)を入力し、OKを押す

秀丸の設定もこれで終了。これでsplintを実行したいC言語のソースファイルを秀丸を開き、メニューのマクロsplintか、キーボードからCtrl+1を押せば実行できます。
ためしに下記のCソースで実行してみます。

#include <stdio.h>

void main (void)
{
    int i, x;
    
    x = 0;
    for (i=0; i<10; i++) {
        x += (1 << i);
    }
    printf("%d \n", x);
}

↑ これで実行すると、以下のような結果 ↓ が出力されます。

Splint 3.1.1 --- 12 April 2003

D:\hoge\hoge.c(3): Function main declared to return void, should return int
  The function main does not match the expected type. (Use -maintype to inhibit warning)

Finished checking --- 1 code warning

1つだけワーニングが検出されました。(一応言っておきますが、それなりに大きいソースだと鬼のようにワーニングが出ると思います。)
なおソース名(行数)が書いてあるところにカーソルを合わせて、F10を押せば該当箇所にタグジャンプが可能です。
それとこのワーニングを非表示にしたい場合は、出力メッセージ(Use -maintype to inhibit warning)に従いsplintrc.txt-maintypeを追加します。

;====================
; * option (to ignore)
;====================
-maintype

これで再度実行すると

Splint 3.1.1 --- 12 April 2003

Finished checking --- no warnings

というように先ほどのワーニングが検出されなくなりました。
ちなみに今回は一番ゆるいweakモードで実行しましたが、このほかにはstandardchecksstrictという全部で4パターンのモードがあります。もしモードを変えて実行したければsplintrc.txtの最初の部分を

;====================
; * mode
;====================
;-weak               ;   ゆるい
;-standard           ;   ややゆるい
;-checks             ;   ややきびしい
-strict             ;   きびしい

というようにweakをコメントアウトし、strictのコメントをはずせばOKです。

そのほか、気づいたことなど
  • コマンドプロンプトから直接実行する場合は、splint (対象ファイルのパス) +f C:\splint-3.1.1\splintrc.txtです。
  • 秀丸以外でも外部プログラムの実行機能があるテキストエディタなら同様の設定で多分いけるハズ。
  • コマンドプロンプトからsplint.exe -help flags fullと実行すれば、フラグ全部の説明をみることができます。なのでsplint.exe -help flags full > flags_full.txt等でファイルに出力してヘルプ代わりにすると便利だと思います。
  • ソースファイルのパスに日本語が含まれていると実行はできますが、ファイルのパスが化けるのでご注意。
  • C:\splint-3.1.1\以外にインストールする場合は何箇所か変更が必要です。(このページのC:/splint-3.1.1/またはC:\splint-3.1.1\と書いてある場所をインストールしたパスに置き換えればいける多分OK!だと思います。それとProgram Filesなどスペースには注意!!)
さいごに

半年くらい前に一回使ったきりで、久しぶりに動かそうとしたらなかなか設定ファイルが有効にならず、手順を思い出すまで少々手間取りました。
(前回動かしたときは、設定内容を.splintrcという拡張子のみのファイル名でソースと同じ場所に保存し、splint (ソースファイルパス)で実行する、という方法。ソースと同じフォルダに設定ファイルを置くとか.splintrcというファイル名とかちょっとメンドクサイ)
なのでこれからは簡単に実行できるように、1クリック秀丸&VCから実行できるようにしました。このツールは、隠れたバグ処理系依存等かなり色々なことを注意してくれるのでうまく付き合えば、とっても強力な味方になってくれると思います。Windows環境でCのプログラムを書いているなら一度試してみる価値はあると思います。

丸岡 孝司¥ 1,974
ネタ向き?
ポインタで混乱した人は良いかもです
異端の書。でも続編が出たら買います。
技術評論社:491位 (2010.03.01)
Amazonで詳細を見る by AmaGrea

*1:ちなみにこのファイルがオプション設定ファイルで、";"(セミコロン)以降はコメント