Compiler-Option zum Abfangen nicht zugewiesener r-Werte

8

Etwas peinlich, schrieb ich etwas wie das Folgende (saniert):

%Vor%

Der offensichtliche Fehler ist offensichtlich. Es hat jedoch eine Weile gedauert, bis man es gefunden hat.

Dafür wurden keine Compiler-Warnungen generiert, aber sollte einer gewesen sein? Es wird hier ein ungenutzter r-Wert erzeugt (und nicht ein ungenutzter Rückgabewert von einer Funktion, die wegen seiner Nebenwirkungen aufgerufen wurde), was für mich ein Indikator dafür ist, dass etwas mit dem Code nicht stimmt.

Kompiliert mit g++ -Wall -Wextra . (GCC 4.8.3)

Ich weiß über -Wunused-result , aber das trifft hier nicht zu.

    
Baldrickk 23.08.2017, 08:32
quelle

2 Antworten

6
  

Dafür wurden keine Compiler-Warnungen generiert, aber sollte es eine sein?

Ich kann mir nichts vorstellen, was ich im Standard gelesen habe, das hier eine Warnung verlangt.

Allerdings scheint das Clan-Entwickler-Team zu glauben, dass es eines rechtfertigt:

%Vor%

Meine ersten Gedanken sind, dass es ein QoI-Problem in gcc ist. Könnte es wert sein, es als ein Problem zu erhöhen.

Ich habe das Glück, dass unsere Software für mac (clang), linux (gcc) und windows (msvc) kompiliert ist, so dass Standardverletzungen und Edge Cases frühzeitig erkannt werden.

Es könnte eine Idee sein, Ihren Code auf einem anderen Compiler neu zu kompilieren, bevor Sie hin und wieder eine Fehlersuche durchführen - das hilft mir.

    
Richard Hodges 23.08.2017, 08:46
quelle
4
  

Dafür wurden keine Compiler-Warnungen generiert, aber sollte es eine sein?

Im Standard ist nichts deklariert, das GCC veranlassen sollte, eine Warnung für diesen Fall zu generieren.

Sie könnten begin() erweitern, indem Sie es als WARN_UNUSED markieren, wo Sie zuerst definieren würden:

%Vor%

wie beschrieben hier , aber dieses von Natürlich ist es nicht genau das, wonach du suchst, aber es ist etwas. Ich kann keine Option von GCC finden, um eine Warnung in Ihrem Fall zu erzeugen.

Es ist ein bekannter GCC-Fehler , aber hat die Funktionalität, nach der Sie suchen, bis mindestens 21.07.2017 nicht implementiert .

Allerdings gibt clang 6.0.0 eine Warnung aus (auch wenn die Flags Wall und Wextra nicht verwendet werden):

%Vor%

Außerdem gibt zapcc 1.0.1 ebenfalls eine Warnung aus (auch ohne die Warnflags):

%Vor%

Sieh es dir selbst in Wandbox an, wenn du magst.

    
gsamaras 23.08.2017 08:49
quelle