2012-11-03 93 views
3

我正在使用一個開源項目(一個服務器),基本上啓動它加載一個大的XML項目數據庫,數百個項目屬性。它使用了大量的else/ifs來檢查這些屬性,我冒昧地再增加大約20個,現在看來我打破了編譯器。我搜索了周圍,沒有我找到的答案實際上給了我一個可行的選擇,所以我只是想知道如果你可以禁用這個,我已經嘗試使用#pragma(因爲他們使用這個在其他一些警告本身)。我對這部分C++沒有太多經驗,所以我可能做錯了。C++禁用C1061錯誤 - 塊嵌套深?

#pragma warning(disable:1061) 

是我試過了,沒有工作給我和錯誤,它不是一個有效的警告。是否有可能禁用此錯誤?

謝謝。

//編輯 - 解決方案 只是想增加我如何解決這個問題。我最終創建了一個函數,將所有的自定義屬性都放入了,所以我不能通過128級限制。

bool isCustomAttribute(std::string strValue, int intValue, xmlNodePtr itemAttributesNode, ItemType& it) 

,我插入別人IFS笑,也許不是漂亮的陣列,但它是一個快速簡便的解決辦法。

+0

我想這個錯誤不能被禁用,似乎是某種形式的靜態限制,編譯器不能超過。作爲一般規則,您不能(也不應該)禁止錯誤消息。警告可以被抑制,但只有當你確信警告在這種情況下無效時才能進行警告。 – Will

+1

如果你真的在重載編譯器,要求它不要告訴你這些信息不會有多大幫助。我會考慮簡化代碼,比如剪掉一些部分並將它們放在不同的函數中。 –

+0

取決於您的編譯器,您可能可以提高最大塊深度,但我認爲您應該改爲問如何更好地考慮代碼。 – cgmb

回答

3

你不能禁止這個錯誤,因爲它是一個致命的編譯器錯誤,而不是警告。 Its documentation說:

編譯器限制:塊嵌套太深

的嵌套代碼塊超過128個嵌套級別的限制。 簡化嵌套。

這是編譯器的一個限制,但是請注意,在可讀性和可維護性方面,128嵌套級別太多了。您應該重構該代碼以達到更理想的嵌套級別(例如,四級或更少級別)。

+0

我剛剛查找了實際的嵌套限制,並得到了相同的結果。不知道每個嵌套級別有多少寬度的空間...... – Will

+0

爲了讓我們知道我正在處理的是這個項目加載器的源代碼,xml加載器從大約366開始,並且從那裏我確信你會發現嵌套開始的地方... https://github.com/opentibia/server/blob/master/src/items.cpp#L366 – Skint007

+0

@Skint,奇怪的是,我沒有在該代碼中看到128層嵌套。你確定你不錯過一些右花括號嗎?不關閉「else if」範圍將確實是致命的。 –