LLVM在警告方面的改進 WWDC 2013

2021-06-17 17:07:32 字數 2200 閱讀 3724

在寫注釋的過程中,可能產生以下幾點不合理的地方:

1. 描述為空,包括函式說明或者引數說明。如下圖:

2. 返回型別不匹配。如下圖:

3. 引數名稱不一致。如下圖:

4. 引數名不一致,還有可能是由於拼寫錯誤,對於這種場景有自動修正功能:

除了上述針對注釋的警告外,llvm在警告方面還做了另外一些改進:新增一些編譯警告;預設開啟更多的警告(比如上述文件注釋警告預設不開啟);嚴重警告公升級為錯誤

1. 針對一些語言標準未定義的(可移植性存在問題),或者是編譯器實現有差異的**給出警告(預設開啟):

2. 整型資料計算溢位(預設開啟),見下圖:

從上圖可以看出整型計算溢位的警告還停留在比較初級的階段,比如r的結果由m和n相乘得出但沒有警告——如果這裡要給警告要怎麼做?

3. 未使用的函式(經驗證,針對的是未使用的靜態函式):

第一眼看到「unused functions」的標題時,我內心是喜悅的,遺憾的是目前發現只應用在靜態函式上。不過想想也是,其它函式或者介面實現有可能在其它地方被呼叫,而掃瞄整個專案原始碼來確定每個函式是否被呼叫過顯然是不值得的。

4. 隱式的布林值轉換。這點比較適用於c++**,但我一時還比較體會不了具體的實用場景,就摘錄一段wwdc 2013 session 402的片段(如果有誰對這個特性比較有感覺,請指點下):

5. 隱式列舉型別轉換。這點也挺贊的,不同的列舉定義就是不同的資料型別範疇了,在不同資料型別之間轉換是應該給點警告:

6. 針對未宣告的selector進行警告

之前我曾經遇到過乙個問題,就是想呼叫未宣告介面的方法實現但又不產生警告,嘗試用編譯器指示符消除:

示例**:

#pragma gcc diagnostic push

#pragma gcc diagnostic ignored "-wunused-variable"

int i;

#pragma gcc diagnostic pop

不過下面怎麼也消除不了:

#pragma gcc diagnostic push

#pragma gcc diagnostic ignored "-wall"

[self.superview celldidclick:self];

#pragma gcc diagnostic pop

只能:[self.superview performselector:@selector(celldidclick:) withobject:self];

現在。。。llvm又加強了這方面的檢查。。。

7. 返回值型別不一致的話,直接作為錯誤:

8. 定義基類需要顯式宣告,否則作為錯誤處理:

如果要定義基類,需要在介面定義前專門宣告:

—— jason lee @ hangzhou

CAS在多執行緒方面的妙用

今天來教大家如何靈活使用cas 以atomicinteger為例子,凡是以cas思想實現的工具類,都具有 compareandset 舊值,新值 在多執行緒中,我們無法知道到底哪個執行緒會先執行,有的時候我們需要讓執行緒按順序執行,比如常見的面試題 給你三個執行緒,輸出10個abc這樣的字串 abc...

VR技術在展示方面的應用

在企業的展示中,產品的展示主要是為了向消費者傳遞商品的資訊,讓消費者更加直觀全面的來哦接商品,加深消費者的認知和了解,vr技術可以通過文字 等各種方式展示商品資訊,突破常規的侷限性,是消費者了解的更加全面,且讓消費者可以和商品建立良好的互動交流,有效解決商品展示真實感不足的問題。在房地產等建築的展示...

關於PGM在OCR方面的應用

本文僅僅是乙個簡單的pgm在ocr方面的應用的實踐。僅此記錄下來實現的思路。ocr optical character recognition 即是將手寫的文字用計算機自動的識別出來,然後輸送到計算機裡。ocr目前仍然沒有完全成功的產品。但是不論ocr再進行優化,他的基本思路都是相同的。在此,我僅僅...