In einem Produkt, an dem ich gerade arbeite, wurden einige schlimme Fehler entdeckt, die allesamt auf unbeabsichtigte "Durchfälle" in Switch-Anweisungen zurückzuführen sind.Suche nach "Fallthroughs" in C-Code
Nun würde ich gerne einen Schritt weiter gehen - ich würde gerne Switch-Statement-Durchgänge in einer großen Menge von C-Code erkennen. Ich kann nur Linux und gcc 5.6 für die Kompilierung verwenden (also kein clang oder neuer gcc; dies ist, weil neuere gcc nicht für die Zielarchitektur für unser Projekt existiert).
Dies ist ein Code ohne Sturz durch:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
Dies ist ein Code mit Falldurch:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
Sie sollten wahrscheinlich die Begriffe * statische Analyse * und * linter * recherchieren. –
Ich tat, und es sieht aus, dass Durchfälle selten abgedeckt werden. Ich weiß, dass es im neuesten gcc einen Schalter dafür gibt, aber ich kann diese Version von gcc nicht verwenden. – VividD
Beide Beispiele haben "Fall-Throughs" - Fall "0" fällt auf Fall "1". In jedem Fall, wenn Sie solche Dinge entdecken wollen, schreiben Sie ein wenig Code, der Ihre Quelldatei analysiert, und schreit, wenn die gewünschten Bedingungen nicht erfüllt werden. Ein C-Compiler diagnostiziert normalerweise solche Dinge nicht, da der Code gültig ist - also schreiben Sie selbst Code. – Peter