翻譯|行業資訊|編輯:莫成敏|2019-11-20 11:55:32.660|閱讀 588 次
概述:本文描述了C和C ++的靜態分析工具PC-lint Plus v1.3更新內容中的總體改進,該部分內容一共分為了三個部分,本文是第一部分。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
PC-lint Plus是一種靜態分析工具,通過分析C和C ++源代碼來發現軟件中的缺陷。與編譯器一樣,PC-lint Plus會解析源代碼文件,執行語義分析,并構建一個抽象語法樹來表示程序。PC-lint Plus采用各種機制,包括數據流分析,數值跟蹤,讀寫分析,強類型檢查,功能語義驗證和許多其他技術,來提供對單個文件和整個項目強大而全面的分析。
本文描述了在PC-lint Plus v1.3版本中的更新內容之一,總體改進,感興趣的朋友可以請看下面內容~
總體改進:
PCLP-744 打印幫助時顯示當前尺寸選項
現在將在打印幫助時指定大小選項的當前值(通過不帶參數、帶-help或帶-help = -s運行)。
PCLP-1344 允許return和goto替換MISRA中的中斷開關
新選項+ misra_interpret(任何允許返回以替換開關中的中斷)和+ misra_interpret(任何允許goto替換開關中的中斷)抑制消息9042(偏離MISRA開關語法),9077(缺少來自最終開關情況的無條件中斷) 和9090(切換情況缺少無條件的中斷或拋出)時,切換情況由return或goto語句而不是中斷來終止。
PCLP-1351 消息9106現在包括完整的MS整數文字后綴
當為Microsoft整數文字后綴(例如i32)發出消息9106(小寫字母后綴)時,消息9106現在將在消息中包含完整的整數文字后綴,而不僅僅是字母部分(例如i32而不是僅i)。
PCLP-1944 消息912的更新和澄清
現在,消息912特別報告與二進制運算符有關的類型轉換何時將值轉換為不同于僅整數提升會選擇的類型的值。消息描述已更新,以澄清消息的情況和含義。
例如,添加一個char和long將產生:
note 912: left operand of binary operator ’+’, originally of type ’char’ and promoted to type ’int’, will be further converted to type ’long’ due to usual arithmetic conversions with right operand of promoted type ’long’ c + L; ~ ^
僅當將操作數轉換為整數提升選擇的類型時(如添加兩個子整數值時),將不再發出該消息。
PCLP-2613 改善前移goto的處理
與前向goto的使用有關的誤報率降低了(即在功能中稍后指向標簽的goto),尤其是在消息774、838和948方面。
PCLP-2005 對消息3701的列表初始化的處理的改進
消息3701將不再發出以進行std :: initializer_list初始化。仍然會為其他形式的括號列表初始化發布該消息,但是消息文本將明確提到必須將括號刪除才能使用位置。
PCLP-2107 復合文字的值跟蹤
值跟蹤現在將跟蹤由復合文字在C中創建的結構的字段,并可以報告釋放后在使用塊范圍復合文字時的情況。
PCLP-2215 忽略clang搜索中的框架目錄后綴包括macOS上pclp_config的路徑
使用pclp_config生成編譯器配置時,不再將macOS上框架搜索路徑后列出的(框架目錄)后綴解析為路徑的一部分。
PCLP-2250 改進對鏈式清理的支持
如果消息1540和1578調用了另一個清除功能,則它將不再報告清除功能或析構函數執行清除失敗。
PCLP-2270 消息778不再在靜態斷言內部發出
消息778(常量表達式在操作中的值為0)不再在表達式必須為常量的靜態聲明內發出。
PCLP-737 將推論擴展到算術表達式中的變量
推斷變量在算術表達式中的位置,其中涉及加法或減法,例如現在支持+ sizeof(int)<16。請注意,推理中的常量操作數始終支持任意表達式,例如a <10 * 5。
PCLP-2418 改進了對IAR編譯器的支持
在pclp_config生成的配置中增加了對其他IAR關鍵字的支持。在文檔中添加了有關為C ++生成配置的注釋。
PCLP-2461 減少與循環迭代期間被調用函數中if語句條件的含義有關的Value Tracking中的誤報
報告值明顯與報告的位置的本地信息相矛盾的誤報消息已減少,這些值是由循環內調用函數中的if語句所暗示的隱含影響所致。受影響的情況主要表現為消息613的實例,伴隨著兩個補充消息,兩個補充消息的位置相同,這是指一個if語句在循環中的先前函數調用期間測試所報告的指針的情況。
PCLP-2462 考慮通過引用不同類型來使用價值
消息438和838將不再報告僅通過已轉換為其他類型的引用使用該值時未使用該值。
PCLP-2470 報告445(索引變量的重用)用于任意級別的嵌套
現在,消息445報告for索引變量的重用,即使它嵌套在一個或多個內部for語句內。
PCLP-2485 向消息9022添加可選的字符串參數
消息9022(宏定義中的未括號的宏參數)現在具有一個可選的字符串參數,用于報告以下情況:未括號的參數與字符串文字相鄰(因此不能被括號)或未括號的部分被包圍用逗號分隔。在這種情況下,字符串參數將是與字符串文字相鄰或由逗號包圍的參數之一。這允許消息支持CERT C建議PRE01-C,該建議允許針對這些情況的異常(通過基于字符串參數的值來禁止顯示此消息),同時仍支持MISRA C 2012規則19.10(不支持)。
PCLP-2511 改進了對消息1764的結構引用的處理
消息1764現在認識到,如果通過參數將對非const的引用綁定到結構的字段,則無法將對結構的類型引用的參數作為對const的引用。
PCLP-2874 改進了工會的價值跟蹤
對聯合的初始化、賦值和活動成員的支持得到了改進,減少了與類型校正和總體初始化狀態有關的誤報。
PCLP-2568 pclp_config提取Microsoft C / C ++編譯器宏的值
自動配置工具pclp_config現在提取已記錄的Microsoft C / C ++編譯器預定義宏的值。
PCLP-2586 減少涉及循環期間讀取和寫入的變量的“未使用”消息的誤報
在已經嵌套的if語句已被循環讀取和寫入變量的情況下,涉及消息438和838的誤報。
PCLP-2587 改進不確定溢出的推斷值的無符號加法的計算
包含至少一個表示為間隔的值的無符號加法,其和在計算中的溢出是不確定的,因此先前可能會產生似乎確實發生了溢出的結果。這最常表現為假陽性774或845。
PCLP-2597 消息774的新變量/函數/ maro參數
現在,消息774將通過相關的變量,函數或宏(如果可用)進行參數化。例如:
void f(int x) { x = 5; if (x) { } }
現在將發出:
info 774: boolean condition for ’if’ always evaluates to ’true’ (involving variable ’x’)
PCLP-2607 對消息2701的模板處理的改進
消息2701將不再報告功能模板實例化或不明確的變量模板的特殊化。
想要購買PC-lint Plus正版授權,或了解更多產品信息請點擊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: