2016-05-19 23 views
0

FlexeLint/PC-lint ist eine Warnung darüber, dass der Rückgabewert von std :: string :: append nicht auf folgende Werte reduziert wird: sample code:FlexeLint/PC-Lint warnt davor, dass der Rückgabewert von std :: string :: append nicht berücksichtigt wird

#include <iostream> 
#include <string> 

int main() { 

std::string s("Hell"); 
s.append(1,'o'); 

std::cout << s << std::endl; 
return 0; 

FlexeLint Aufruf gibt die folgende Warnung:

Warning 534: Ignoring return value of function 'std::basic_string<char>::append(unsigned long, char)' 

Während diese Nachricht wahr ist, macht es keinen Sinn machen, den Rückgabewert in diesem Fall zu fangen, weil std::string::append gibt einfach * this.

Darüber hinaus können alle Iteratoren, Zeiger und Verweise, die sich auf dieses Objekt beziehen, ungültig gemacht werden. Dies ist jedoch nicht der Fall, es werden keine Iteratoren, Zeiger und Referenzen verwendet.

Frage

Habe ich etwas Wichtiges oder ist dies einfach ein falsch positives Ergebnis von FlexeLint?

+0

Hinzufügen * Während diese Nachricht wahr ist * - Ist das nicht der Job eines lint-Dienstprogramms, und das heißt, alle Probleme zu finden (es sei denn, Sie unterdrücken diese Warnungen)? Ich möchte keinen Nutzen haben, der allein entscheidet, was er mir zeigen wollte. – PaulMcKenzie

+0

@PaulMcKenzie Ich denke immer noch, dass das Werkzeug mir schlauer sein sollte, sogar in wirklich einfachen Fällen wie diesem. Mein Verständnis eines Linter-Tools unterscheidet sich von Ihrem - ich möchte ein Dienstprogramm haben, das intelligent genug ist, um zu entscheiden, was relevant ist. – orbitcowboy

+0

@orbitcowboy intelligente Analyse ist ein Kontinuum und ich kann Ihnen versichern, dass FlexeLint bereits viele dumme Fehlalarme wegfiltert. Es ist nicht trivial, mit geschickter und motivierter menschlicher Analyse zu konkurrieren :) –

Antwort

1

PC-Lint ist ziemlich flexibel und meistens ist es möglich, es an Ihre Bedürfnisse anzupassen. Es gibt mehrere Möglichkeiten, diese Warnung zu deaktivieren:

  • die globale Option Mit -e534 (deckt alle Funktionen)
  • die globale Option Mit -esym(534,std::basic_string<char>::append(unsigned long, char))
  • Kommentar //lint !e534 auf der gleichen Linie
+0

Vielen Dank dafür. Ich denke immer noch, dass das Überprüfen von PC-Lint in diesem Fall verbessert werden kann, weil es einfach keinen Sinn macht, den Rückgabewert hier zu erfassen. Anstatt Fehler zu unterdrücken, sollte das Tool verbessert werden! – orbitcowboy

+0

Eine andere Möglichkeit, die Warnung zu deaktivieren, besteht darin, (void) s.append (1, 'o') zu schreiben; Diese Lösung stört den Code nicht mit Lint-Kommentaren, und es muss keine externe Unterdrückungsliste gepflegt werden. – orbitcowboy

+0

Ich konnte nicht die explizite -esym Unterdrückung zu arbeiten, aber dies tat stattdessen: '-esym (534, std :: basic_string * :: append)' –