xcode中處理工程警告的幾種方法

2021-06-26 10:40:40 字數 2448 閱讀 6660

隨著專案的慢慢發展,工程中的警告數量可能越來越多。這些警告有的是我們自己寫出來的,有的來自第三方**,下面以乙個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)

使用巨集:

int i32 = 0;

discardlostprecisionwarning(i32 = i64);

在 build phases 中為指定檔案增加編譯引數:-wno-shorten-64-to-32,如下圖:

這種方法可以在不修改原始碼的情況下忽略檔案中某種型別的警告,主要適用於以原始碼形式引入的第三方庫。

在 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環境中的注釋可能會被編譯器強調,以便開發人員注意。有沒有辦法使...