Letztens hatte ich folgendes Problem, welches mir die Fehlersuche
erschwerte.
Ich hatte ein Semikolon zuviel im c++-Source. Deshalb wurde ein
Statement ohne Effekt erzeugt, welches aber vom g++ trotz entsprechner
Compiler-Optionen unbemerkt blieb.
Hier ein runtergebrochenes Beispiel:
1 | #include <string>
|
2 | #include <iostream>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | std::string bar = "bar";
|
7 |
|
8 | bar = "foo bar baz:"; // <-- Dieses Semikolon ist zuviel
|
9 | "foo" + bar + "baz";
|
10 |
|
11 | std::cout << bar << std::endl;
|
12 | }
|
Eigentlich war hier eine String-Concatenation über mehrere Codezeilen
gewünscht, leider hat das überflüssige Semikolon das verhindert.
Trotz Übersetzung mit
1 | $ g++ -O2 -Wall -Werror -Wextra -Wunused -Wpedantic a.cc && ./a.out
|
2 | foo bar baz:
|
wird keine Warnung ausgegeben. Wenn ich die Zeile
auf
kürze, erscheint auch erwartungsgemäß
1 | error: statement has no effect [-Werror=unused-value]
|
Compiler: gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)
Frage: Habe ich eine Compileroption übersehen oder hat der Compiler ein
überflüssiges Statement tatsächlich übersehen?
P.S.
Der Grund, warum ich hier String-Concatenation über mehrere Zeilen
benutze, wird aus dem Beispiel nicht ersichtlich. Glaubt mir, es hat
einen Grund. Aber der ist hier nicht Diskussionsthema.