2016-05-17 6 views
2

fangen Wie der Titel schon sagt, für diejenigen, die bereits beginnen wissen mit GCC-6 Sie ein Duplikat in einer if Anweisung dieses Flag -Wduplicated-cond wie diese fangen:Wie ein Duplikat wie `-Wduplicated-cond` von GCC-6

#include <stdio.h> 

int main(void){ 
    int a = 5; 

    if(a == 5){ 
     printf("First condition is True, A = %d\n", a); 
    }else if(a == 5){ 
     printf("Second condition is True, A = %d\n", a); 
    } 
} 

und der Ausgang wird sein:

program.c:8:17: warning: duplicated ‘if’ condition [-Wduplicated-cond] 
    }else if(a == 5){ 
       ~~^~~~ 
program.c:6:11: note: previously used here 
    if(a == 5){ 
     ~~^~~~ 

Jetzt weiß ich, dass der folgende:

else if((a > 4) && (a < 6))

ist nicht das gleiche wie

else if(a == 5)

aber es kommt vor, dass ich einen Scheck für den gleichen Zustand, wenn a == 5 tun.

Meine Frage ist, gibt es irgendwelche Chancen, diese Art von Duplikat zu fangen (zu vermeiden)?

+1

Ich bezweifle, dass es gefangen wird ... die Analyse ist zu komplex für so eine kleine Sache. –

+0

Ich denke, dass 'if (a == 5)' und 'else if (a == 5)' die gleichen Anweisungen erzeugt und 'else if ((a> 4) && (a <6)) 'erzeugt einen anderen Befehl [ s], was wahrscheinlich bedeutet, dass der Compiler prüft, ob die gleichen Anweisungen stattfinden und nicht, wenn die Bedingungen dasselbe Ergebnis annehmen (erzeugen). Ich bin mir nicht sicher, ob ich recht habe. – Michi

+0

Michi, öffne deine Augen gut während du codierst. –

Antwort

-1

-Wduplicated-cond fängt diesen Fall. Sie müssen es explizit aktivieren.

main.cpp: In Funktion 'int main()':

main.cpp: 8: 11: Warnung: dupliziert 'wenn' Zustand [-Wduplicated-Cond]

}else if(a == 5){ 
     ^~ 

main.cpp: 6: 5: Anmerkung: zuvor hier verwendet

if(a == 5){ 

Es war ursprünglich enabled by -Wall aber nicht mehr bec AVerwenden von PR67819:

Da die neuen Warnung derzeit Bootstrap bricht [*] und ich keine einfache Art und Weise sehen, wie PR67819 zu lösen aus dem Scheitern Bootstrap abgeleitet, ich bin bewegt -Wduplicated-cond aus -Wählen und überspringen Sie einen der Tests vorläufig. Ich gebe auch den Hack in genemit.c zurück.

+0

Das OP spricht über doppelte Erkennung, wenn verschiedene logische Aussagen verwendet werden (d. H. 'A == 5' und' a> 4 && a <6'). – fpg1503

Verwandte Themen