Ich möchte ein Tool, um C / C++ zu parsen (andere willkommen, insbesondere PHP, aber C / C++ == Priorität) und Aufrufe von typisierten Funktionen zu finden, die den Rückgabewert nicht überprüfen.
Ich sehe keine g++-Option (hat MS eine solche Option).
Vielleicht so etwas wie Splint ? Oder gibt es eine IDE, mit der ich das überprüfen kann? GUI- und CLI-Lösungen sind beide willkommen.
Vorzugsweise Linux, aber Windows ist akzeptabel.
Muss kostenlos sein.
Irgendwelche Ideen?
In gcc
haben Sie folgende Möglichkeiten:
-Wunused-result
Warnt, wenn der zurückgegebene Wert nicht verwendet wird -Wunused
, warnt vor einer Reihe von nicht verwendeten Fällen und -Wall
(mein Favorit) schaltet eine Reihe von Warnungen ein, einschließlich -Wunused-result
Eine vollständige Liste der gcc-Warnoptionen finden Sie hier .
Sie können auch Funktionsattribute verwenden , warn_unused_result
um eine Warnung zu generieren, wenn ein bestimmter Funktionsrückgabewert nicht verwendet wird.
Und gcc
ist natürlich kostenlos.
Seltsamerweise funktionierten weder -Wunused-result noch -Wall in g++ v4.6.3. Das von Steve vorgeschlagene Funktionsattribut tat dies jedoch.
int GenerateRandomNumber() __attribute__((warn_unused_result));
int GenerateRandomNumber()
{
return 4;
}
int main()
{
GenerateRandomNumber();
return 0;
}
ergibt sich
**** Build der Konfiguration Debug für Projekt used_return_value ****
alles erstellen Baudatei: ../src/unused_return_value.cpp Aufruf: GCC C++ Compiler g++ -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -Wunused-result -MMD -MP -MF"src/unused_return_value. d" -MT"src/unused_return_value.d" -o "src/unused_return_value.o" "../src/unused_return_value.cpp" ../src/unused_return_value.cpp: In Funktion 'int main()': .. /src/unused_return_value.cpp:10:24:
warning: ignoring return value of ‘int GenerateRandomNumber()’, declared with attribute warn_unused_result
[-Wunused-result] Fertiges Bauen: ../src/unused_return_value.cpp Bauziel: unused_return_value Aufruf: GCC C++ Linker g++ -o "unused_return_value" ./src/unused_return_value.o Fertiges Gebäudeziel: ungebrauchter_Rückgabewert**** Fertig gebaut ****
Ich könnte das Attribut in ein #define packen.
Ich dränge auch stark darauf, die Option "Warnungen als Fehler behandeln" zu verwenden. Ich bin fest davon überzeugt, dass jeder, der einen Compiler erstellen kann, mehr über die Sprache weiß als ich (ich hatte Probleme mit dem Drachenbuch) und daher nie verstehen kann, wenn Leute mit den Schultern zucken und sagen: "Es ist nur eine Warnung".
Ich werde auch darauf drängen, einen Linter zu verwenden. Und damit der Code Compiler- und Linter-warnfrei ist, bevor der Code überprüft wird (Ergebnisse von beiden sind mit dem Code einzureichen) und vor der Freigabe zur Versionskontrolle.
Danke, Steve!
Ira Baxter
Mawg sagt, Monica wieder einzusetzen
Ira Baxter
Mawg sagt, Monica wieder einzusetzen
Ira Baxter
Mawg sagt, Monica wieder einzusetzen
Ira Baxter
Mawg sagt, Monica wieder einzusetzen
malloc()
und der Code wurde fortgesetzt, als ob er erfolgreich wäre. Meiner Meinung nach hilft mir Steves Vorschlag, das zu erkennen, wie in dem Beispielcode, den ich als Antwort gepostet habe. Ich habe das schreckliche Gefühl, dass wir "aneinander vorbeireden" - was übersehe ich?Ira Baxter
Mawg sagt, Monica wieder einzusetzen
x = foo()
dem x während der Codeüberprüfung nicht getestet wurde (aber es ist die Art von Code, bei der es mich nicht überraschen würde, das zu sehen, leider: - (Danke für die Klarstellung. Ich überlasse Steve die Antwort, bis etwas Besseres kommt.Ira Baxter
Mawg sagt, Monica wieder einzusetzen