【C言語】
無料の静的解析ツールを使うか?
有料の静的解析ツールに使われるか?


警告:使いこなせてる?clang /gcc/cppcheck

■1.おすすめのツールとオプション

(1) clang -Weverything
(2) clang –analyze
(3) clang-tidy
(4) gcc -Wall -Wextra
(5) gcc -fanalyzer
(6) cppcheck


■2.無料で静的解析するSHELL

#!/bin/bash -x
clang -Weverything -O2   $* -c -Wno-missing-prototypes
clang --analyze    -O2   $* -c -Wno-missing-prototypes

gcc   -Wall -Wextra       $* -c
gcc   -Wall -Wextra -O2   $* -c
gcc   -fanalyzer    -O2   $* -c

clang-tidy  $1 \
-checks=*,\
-hicpp-braces-around-statements,\
-readability-braces-around-statements,\
-google-readability-braces-around-statements -- $* -O2
              
cppcheck --enable=all --inconclusive \
--platform=unix64 \
--template="{file}:{line}: ({severity}): {message} : [({severity}){id}]" \
--suppressions-list=suppressions.txt \
$*

■3.clang

(1)clang -Weverything で通常警告は全部言う(ので五月蠅い)。
通常 実運用では使わない。
(2)clang –analyze で静的解析(データフロー解析)を行う。
時間がかかる。
(3)clang-tidy は主にコーディング作法回りをチェックしてくれる。
(3-1)-checks=*は「全部言え」を意味する。
(3-2)ハイフォンで始まる -hicpp~などが「黙れ」を意味する。
(3-3)–(ハイフォンハイフォン)の後ろに通常のコンパイルオプションを記述する。

■4.gcc

(1) gcc -Wall の -Wall は「警告全部」ではなくて
 「これだけは全部直せ」の意味。
  職業プログラマはgcc -Wall -Wextraの警告を全部直したい。
  最適化オプション(-O)のレベルによって
  警告が出たりでなかったりするが、
  通常最適化したほうがより深い警告を出してくれる
 (関数を跨いだ未初期化変数とか)
(2)gcc -fanalyzer は最近リリースされた静的解析オプションで
  メモリーリークやNULLポインタ参照を深く解析してくれる。

■5.cppcheck

(1) –enable=all で確実な警告は全部言う。

(2) –inconclusive で疑わしい警告も言う(省略可能)

(3)–platform=unix64で自分の環境を指定する(省略可能)

(4)–template=~~で出力形式を指定する(省略可能)

(5)–suppressions-list=suppressions.txtで
 指定したファイルsuppressions.txt(自分で作る)内に
 抑止したい警告IDをずらずら列記する(省略可能)

■6.注意事項

gcc -pedantic と
clang -Weverythingは製品開発の実運用で使用してはいけません。
詳しくはこちら ”gcc -pedanticを使う必要はない”を参照