隨著專案的慢慢發展,工程中的警告數量可能越來越多。這些警告有的是我們自己寫出來的,有的來自第三方**,下面以乙個64位轉32位損失精度的警告為例來說明如何處理警告。
定位警告方法見下圖:long long i64 = 0x0000f000;
int i32 = i64;
nslog(@"-------->%d", i32);
按照上圖定位後,我們可以看到詳細的編譯資訊:
可以看到警告資訊,展開具體的編譯警告資訊:
注意圖中的選中高亮部分,這就是每條警告的具體資訊,
如上是:-wshorten-64-to-32,
即:將 64 位轉換為 32 位可能損失精度。
-wshorten-64-to-32 是產生警告的編譯引數,忽略這種型別警告的編譯引數為在前面加 no 即:-wno-shorten-64-to-32。
對於如上的警告型別,程式設計師需要確定轉換時是否會損失精度,
如果不會損失精度,直接強制型別轉換:
如果會損失精度,改變變數型別:long long i64 = 0x0000f000;
int i32 = (int)i64;
nslog(@"-------->%d", i32);
這種處理警告的方法主要適用於我們自己編寫的**,即:我們要知道自己寫的是什麼。long long i64 = 0x0000f000;
long long i32 = i64;
nslog(@"-------->%lld", i32);
使用這種方法可以在原始檔的某個部分忽略警告。long long i64 = 0x0000f000;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-wshorten-64-to-32"
int i32 = i64;
#pragma clang diagnostic pop
定義巨集:
使用巨集:#define discardlostprecisionwarning(codeblock) \
do while (0)
在 build phases 中為指定檔案增加編譯引數:-wno-shorten-64-to-32,如下圖:int i32 = 0;
discardlostprecisionwarning(i32 = i64);
這種方法可以在不修改原始碼的情況下忽略檔案中某種型別的警告,主要適用於以原始碼形式引入的第三方庫。
在 target –> build settings -> custom complier flags -> other warning flags 中增加 -wno-shorten-64-to-32,如下圖:
這種方法可以在不修改原始碼的情況下忽略target中某種型別的警告。
在工程中忽略警告的方法與在 target 中忽略警告的方法類似,但是可以控制工程中的所有 target,前提是:target要繼承 project 的編譯設定,設定繼承的方法見下圖:
即增加:$(inherited)。
然後設定工程的build settings -> custom complier flags -> other warning flags 中增加 -wno-shorten-64-to-32,如下圖:
然後到 target 中可以看到編譯設定為:
注意:編譯設定沒有使用加粗字型,說明是繼承來的。
去掉Xcode工程中的 某種型別的警告
問題描述 在我們的專案中,通常使用了大量的第三方 這些 可能很複雜,我們不敢改動他們,可是作者已經停止更新了,當sdk公升級或者是編譯器公升級後,這些遺留的 可能會出現許許多多的警告,那麼我們有沒有辦法去掉這些煩人的警告,不然乙個工程幾百個警告,你看著怎麼都不爽吧。我們怎麼去掉警告呢?1.最直接 最...
去掉Xcode中的警告資訊
開發乙個專案時,難免會產生很多無關緊要的警告,很多是第三方或是老 不再被支援造成的,但並不影響使用,花大力氣去解決警告也不合時宜,偷個懶,把一些隱藏掉吧!關閉工程中指定 型別的警告 下面是乙個示例工程的警告,乙個第三方,還有一些是ios不再提倡使用的類如uiactionsheet,這些對專案的影響不...
高亮顯示Xcode中的警告
在swift開發中,我們通常使用todo注釋作為將來重構的標記 因為xcode會方便地在其檔案結構下拉列表中顯示相應部分,如下所示 但是,xcode不能提醒我們這樣的警告或錯誤訊息。以前,warning或 errorobjective c環境中的注釋可能會被編譯器強調,以便開發人員注意。有沒有辦法使...