2017-08-08 139 views
2

我們在一個DSP內聯彙編中有一個文件。 Cppcheck認爲程序集中存在「變量賦值但未使用」行的負載。如何告訴cppcheck忽略內聯彙編?

有什麼辦法可以告訴它跳過檢查內聯彙編部分?我什麼也看不到明顯的手冊中,這是一個有點乏味有抑制反過來每一行(T

下面是一些違規線的一個例子,這是一個環境保存程序。

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; 
    ... 

我可以關閉的消息與 每行前// cppcheck,抑制unreadVariable ,但它會更好,只是告訴cppcheck跳過整個內聯彙編部分。

有什麼辦法我可以做到這一點,或者我們只需要接受大量的重複評論?

感謝,

伊恩

+2

看起來像你應該能夠使用'-D'或'-U'。如果你在'#ifndef cppcheck'中包裝你的asm,那麼我希望'-Dcppcheck'跳過它。 –

+0

@DavidWohlferd謝謝。真的很明顯 - 看不到樹木。 –

回答

2

有點違反直覺的,但由於@DavidWohlferd指着我的正確途徑。

-D__CPPCHECK__做正確的事。它告訴cppcheck只有檢查塊有__CPPCHECK__或沒有定義,即完全關閉組合檢查。然而,使用-U有一個簡單但反直覺的解決方案。

纏上

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

現在,如果你調用cppcheck與-UEXCLUDE_CPPCHECK它會跳過該塊(即使指令#define之前它!),但仍然做的#define的所有其他組合的塊,在#if中使用。

謝謝大衛和德魯。

+1

從來沒有使用cppcheck,我只是猜測。但這似乎是合理的。這就是說,我很驚訝cppcheck沒有一個它爲此目的而預先定義的符號。 –

2

根據手冊頁(沒有嘗試我自己),你可以添加命令行選項:

--suppress=<spec> 

中的特定警告。 <spec>的格式是:[error id]:[filename]:[line][filename][line]是可選的。 [error id]可能是*以禁止所有警告(對於指定的一個或多個文件)。 [filename]可能包含通配符*?。文件中列出的

--suppressions-list=<file> 

禁止警告。每種抑制的格式爲上面的<spec>

I.e.在你的情況下,--suppress=unreadVariable:all_dsp_asm_*.cpp並完全切換爲這些特定的文件。哪些是IMO可用的,因爲您可以將所有DSP內聯asm東西放入單獨的文件中,所以它不會影響您的普通cpp檢查。

或者在最壞的情況下,使用抑制列表列表文件,您可以在其中列出特定的行和我猜想的荒謬行爲,以覆蓋整個行內部分。

我不明白如何在源代碼中內聯它,看起來像它可能只會影響單行。


檢查可能更高達manual here最新版本,您可以通過-i<filename>(第二頁)排除整個文件也。

上面的選項是在第11頁

+0

我想過,但不幸的是它不適合我。我不想完全禁用該文件的檢查,只適用於內聯彙編部分。 –