0

我試過儘可能地搜索文檔和互聯網,但是我一直無法讓Xcode編譯器在if語句中使用賦值運算符時發出警告。如何讓Xcode 3.1編譯器在if語句中警告賦值運算符?

我是從REALbasic的,在那裏我有鍵入這種比較的一個極強的習慣來:

if x = 5 then ... 

在C,當然,這句法分配的x 5個,然後測試值看到的結果,如果是非零和「正確」的操作是:

if (x == 5) { ... } 

我已經發現了幾個提到,編譯器應該能夠發出警告,如果有,如果比較在做的任務,但我在Xcode 3.1/gcc中找不到如何打開它。我發現-pedantic選項,但似乎沒有產生警告。

由於我已經花了相當多的時間兩次,現在追蹤錯誤,結果是「=」而不是「==」,我想要一個警告的幫助。

我知道我能做到這一點,而不是(這將導致一個編譯器錯誤):

if (5 = x) { ... } 

...但是,這需要改變根深蒂固的編碼習慣了。更不用說它看起來笨拙和落後。

謝謝!

回答

1

的鏈接ennuikiller的答案選項確實引起了我所需要的。

這裏的任何人提供更多的信息誰在將來可能會發現這樣的:

  • 的編譯器警告是「缺少大括號和括號」,或-Wparentheses。

  • 通過爲Xcode中當前的 目標選擇獲取信息打開該警告。

  • 正如我終於發現,iPhone模擬器SDK確實不是顯示 這個編譯器選項。

  • 將SDK切換到iPhone設備將顯示GCC 4.2警告 部分,其中包括「缺少 括號和括號」。

  • 打開在iPhone設備SDK該選項,切換回 到Similator後表明, 「用戶自定義」構建設置已經 補充說: GCC_WARN_MISSING_PARENTHESES = 「YES」。

  • 如果在if語句中真的需要賦值,則可以使用括號的兩倍來避免警告。

(雙括號示例:)

if ((x = 5)) { ... } 

警告就像一個魅力,但它確實不喜歡蘋果的標準:

if (self = [super init]) { ... } 

我可能會離開這些原樣是,但是如果我在項目中結束了大量的工作,我可以將括號加倍或者將工作分解爲單獨的一行。

謝謝!

+0

該標誌對我不起作用。我有這樣的代碼:'if(newlyCreated = true){goToLastElement = true; }'雖然該標誌已啓用,但xcode/g ++不會發出警告。 (注意:C++代碼) – 2011-02-24 18:12:54

+0

我剛發現它不適用於'bool'變量:/ – 2011-02-24 18:16:16

1

您正在尋找我認爲的-Wall選項。

int main(void) { 

    int x = 5; 
    if (x=5) { 
    } 
    return 0; 
    } 

$ g++ -pedantic x.cc 
$ g++ -Wall x.cc 
x.cc: In function ‘int main()’: 
x.cc:7: warning: suggest parentheses around assignment used as truth value 

link介紹如何啓用通過Xcode的GUI