2017-08-08 110 views
2

DSPのインラインアセンブリ内にファイルがあります。 Cppcheckは、アセンブリに「変数は割り当てられているが使用されていない」行があると考えています。インラインアセンブリを無視するようにcppcheckに指示するにはどうすればよいですか?

インラインアセンブリセクションのチェックをスキップする方法はありますか?トン

はここで問題のあるラインの一部の例です(私は手動で明白な何かを見ることができませんでした、そして、順番にそれぞれの行を抑制するために持って少し面倒です。これは、ルーチンの保存状況だ。

inline assembly void save_ctx() 
{ 
asm_begin 
.undef global data saved_ctx; 
.undef global data p_ctx; 
asm_text 
    ... 
    st XM[p0++], r0; 
    st XM[p0++], r1;  
    st XM[p0++], r2;  
    st XM[p0++], r3;  
    st XM[p0++], r4;  
    st XM[p0++], r5;  
    st XM[p0++], r6; 
    ... 

私は、各行の前にunreadVariable // cppcheck-抑制するとのメッセージをオフにすることができ、それだけで全体のインラインアセンブリセクションをスキップするcppcheckを伝える方が良いでしょう。

をどのような方法私はありますこれを行うことができますか、何度も繰り返されるコメントを受け入れるだけですか?

おかげで、

イアンあなたは、コマンドラインオプションを追加することができます(自分自身をしようとしなかった)のmanページによると

+2

'-D'や' -U'を使うことができるようです。 asmを '#ifndef cppcheck'でラップすると、' -Dcppcheck'はそれをスキップすると思います。 –

+0

@DavidWohlferdありがとうございます。明らかに本当に - 木の木が見えませんでした。 –

答えて

2

でやや直感的ですが、私は右の道を指し示すための@DavidWohlferdに感謝。

-D__CPPCHECK__は正しいことをします。これはでチェックブロックのみを指定するか、または何も定義されていない、つまりコンビナトリアルチェックを完全にオフにします。しかし、-Uを使用する単純で反抗的な直感的な解決策があります。あなたは-UEXCLUDE_CPPCHECKでcppcheckを呼び出す場合

ラップ

#define EXCLUDE_CPPCHECK 
#ifdef EXCLUDE_CPPCHECK 
... 
#endif // EXCLUDE_CPPCHECK 

を持つブロックが今では(!の#defineはそれの前にあるにもかかわらず)そのブロックをスキップし、それでもこれの#defineの他のすべての組み合わせを行います#ifで使用されます。

デーヴィッドとドリューありがとうございました。

+1

cppcheckを一度も使用していないので、私はちょうど推測していました。しかしそれは妥当と思われた。つまり、私はcppcheckにはこの目的のために 'あらかじめ定義されている'というシンボルがないことに驚いています。 –

2

--suppress=<spec> 

特定の警告を抑制します。 <spec>の形式は、[error id]:[filename]:[line]です。 [filename]および[line]はオプションです。 [error id]*であり、すべての警告(指定されたファイルまたはファイル)を抑制することがあります。 [filename]には、ワイルドカード文字*または?が含まれている場合があります。

--suppressions-list=<file> 

ファイルに記載されている警告を抑制します。各抑制は、上記の<spec>の形式になっています。

e.e.e.あなたのケースでは--suppress=unreadVariable:all_dsp_asm_*.cppとそれらの特定のファイルのために完全に切り替えます。すべてのDSPインラインasmのものを別々のファイルに入れることができるので、通常のcppチェックには影響しません。

最悪の場合は、抑制リストリストファイルを使用してください。ここでは、広告ライン全体をカバーするために不条理な特定の行をリストすることがあります。

ソースでインライン化する方法がわかりませんが、1行にしか影響しないようです。


manual hereの最新のバージョンにアップおそらくよりの確認、あなたは-i<filename>(2ページ)によっても、ファイル全体を除外することができます。

上記のオプションは、11ページ

+0

私はそれについて考えましたが、残念ながらそれは私のためには機能しません。私はそのファイルのチェックを完全に無効にしたくないのですが、インラインアセンブリセクションのみです。 –