2011-10-09 39 views
9

我有一個複雜的switch聲明,我忘記把break放在case之一的末尾。這是非常合法的,因此我碰到了下一個case如何告訴gcc警告(或失敗)switch/case語句而不中斷?

如果我忽略了一條break聲明,是否有任何方法讓gcc發出警告(或者更好,失敗)?

我知道有很多有效的使用案例(我經常在我的代碼中使用它們),如this question所示,顯然這樣的警告(或失敗)需要一個簡單的棄權,以便我可以輕鬆地說, 「我確實想在這裏消失。」

有什麼辦法告訴gcc做到這一點?

+0

老實說,如果這就是你想要什麼,我會說,根本就沒有使用開關/箱。開關/外殼的唯一優勢仍然是,它很容易在你想要的地方跌落。 –

+0

Hehehe,C#強制你放置break語句,如果你不需要編譯 – BlackBear

+0

只是好奇,我們能看到代碼嗎?也許有更好的解決方案,不需要開關。 – fredoverflow

回答

1

你可以構建的grep/perl的/ emacs的/等一個正則表達式查找所有的地方有case之前沒有break

0

簡短的回答是沒有,gcc中沒有這樣的標誌來做到這一點。開關盒經常用於墜落,所以這就是爲什麼在gcc中有這樣一個標記是沒有意義的。

+2

我認爲它是有道理的,它只是不需要默認爲打開。似乎它可能適合於-Wextra或-pedantic。 –

4

此檢查適用於C和C++代碼的免費靜態分析器Cppcheck。該檢查目前標記爲「實驗」,因此您需要使用--experimental命令行開關將其打開。

此檢查警告不要了落空至下一情況下沒有控制流的語句,如breakcontinuereturn等,除非有一個與文字註釋,如// fall through緊接的下一個非空的情況下條款case

通過查看源代碼中的switchFallThroughCase test cases,您可以瞭解這種處理的構造類型。