Deaktivieren g++ "Hinweis: die Kandidaten.." compiler-Meldung
Viele Male, wenn ich zum Beispiel etwas mit einem Tippfehler oder eine andere Eingabe nicht übereinstimmen, ich bekomme die standard-Fehlermeldung "Fehler: no match for 'functionname' in ... " - Fehler. Das ist großartig. Dann, vor allem im Fall von überladen von Funktionen und Operatoren, g++ geht auf und Liste wie 10 Seiten von Kandidaten, die sind einfach nur scheusslich und massive template-Definitionen.
Die Fehlermeldung ist toll, aber gibt es eine Möglichkeit zum deaktivieren von darauf hindeutet, sonstige Funktionen Varianten?
- Warten Sie, wollen Sie die Fehlermeldung an, die weniger Informationen?
- Die Funktion Definitionen schlägt er versteckt hinter 10 Schichten templating (vor allem mit boost) und machen es sehr viel schwieriger zu finden, wo der compiler tatsächlich identifiziert die Zeile mit dem Fehler. Ich will es mir nicht sagen, wo der Fehler war und was falsch war, aber ich weiß nicht wirklich brauchen, es zu schlagen, wie es zu beheben.
- Rohr es durch grep, nur Spiel auf Linien, die 'Fehler:' in Ihnen? FWIW meine Entwicklungsumgebung hat 'Sprung in die Zeile mit dem Fehler' als eine Funktion, die als zusätzlichen bonus lässt die Spitze der Liste der Kandidaten zeigt auf dem Bildschirm.
- verwenden Sie klammerten. Es ist viel schöner Fehlermeldungen.
- clang++ wird nicht helfen, hier bietet es
-fshow-candidates=<value>
aber das argument kann nurbest
oderall
zB nichtnone
- Hilfreich können Informationen weniger hilfreich als keine Informationen, vor allem, wenn Sie brauchen, um einen Bildlauf durch Seiten von sich wiederholenden text, nur um zu versuchen, um herauszufinden, was der tatsächliche Fehler ist.
- Wenn Sie möchten, um zu sehen, eine besonders tückische Instanz dieser, versuchen
boost::variant<bool, int> value; std::ifstream input("filename.txt"); input >> value;
Produziert über 50k der output des GCC 5.3.1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Soweit ich weiß, gibt es keine compilation-flag im GCC zu deaktivieren, die vorgeschlagenen Kandidaten im Falle der mehrdeutigen Funktion aufruft.
Ihre einzige Hoffnung ist vielleicht der patch GCC Quellcode.
Graben in es (version: 4.7.1), ich habe gefunden, was erscheint in der entsprechenden Funktion im
gcc/cp/pt.c
:Als eine Vermutung, ich denke, dass Sie nur brauchen, um kommentieren Sie die Funktion Körper.
print_candidates
Funktion. Derzeit kann ich nicht bestätigen, dass es funktioniert, weil noch original-gcc compilieren zu auf meinem Rechner, und ich habe keine Zeit, es zu beheben.Meine Antwort ist nicht so cool wie ein patch. Wenn Sie möchten, eine weniger ausführliche Fehlermeldung, das script wird entfernen Sie die hässlichen code, und lassen Sie einfach die Nummer der Zeile, für die Kandidaten.
So, es kann eingesetzt werden in ein Skript wie dieses:
Wenn der name dieses Skript ist
g++
und in Ihrem Weg, es sollte so arbeiten, als ob Sie Hinzugefügt haben, eine Kommandozeilen-option namens-fterse-notes
.-fterse-notes
und-fno-terse-notes
.bash
scheint zu behandeln, was ich schrieb, okay, aber vielleicht die, die technisch korrekte Umsetzung wäre nur Inkrement innerhalbelse
Klausel, nach derARGS[$i]="$arg"
- Anweisung.Tut
-Wfatal-errors
tun, was Sie wollen?Hört es alle Fehler nach der ersten, welche ist nicht das gleiche wie einfach unterdrückt Kandidat-Funktion-Notizen, aber es reduziert die Produktion deutlich:
Oder, wenn Sie wollte, patch, GCC, fügt diese ein
-fno-candidate-functions
Schalter: