Beliebt

gcc Compiler Warnflags fehlen - gcc

Ich wollte einige der Warnflags verwenden, die auf aufgelistet sind https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html. Es scheint jedoch, dass ich nicht alle verwenden kann. Beispielsweise -Wpessimizing-move wird von gcc f├╝r mich nicht erkannt (erzeugt immerein Fehler, da diese Option nicht existiert). Dieses Problem besteht f├╝r einige der Flags. Ich benutze gcc aus dem Fedora-Repository Das ist meine Version Ausgabe:

Es werden eingebaute Spezifikationen verwendet.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Ziel: x86_64-redhat-linux
Konfiguriert mit: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread-Modell: posix
gcc-Version 8.3.1 20190223 (Red Hat 8.3.1-2) (GCC)

Der gleiche Fehler tritt sowohl bei gcc als auch bei g ++ auf. Was k├Ânnte der Grund f├╝r dieses Verhalten sein? Und wie kann man das beheben?

Antworten:

0 f├╝r Antwort Ôäľ 1

Aus der Dokumentation geht eindeutig hervor, dass dies nur f├╝r C ++ gilt:

-Pessimizing-Move (nur f├╝r C ++)

So g++ werde es akzeptieren, aber nicht gcc.

Zur Dokumentation kann man den entsprechenden Eintrag auf ├╝berpr├╝fen llvm -Wpessimizin-Umzug.

Hier ist jedoch eine Kopie:

Diese Warnung wird fangen:

  • Verwenden von std :: move in einer R├╝ckgabe, bei der das verschobene Objekt eine lokale Variable ist
  • Verwenden Sie std :: move f├╝r ein PR-Wert-Objekt

struct A {}
A test() {
A a = std::move(A());  // warn since A() is a pr-value
return std::move(a);   // warn since a is a local variable
}