Compilerwarnungen Clang / gcc



  • Ich habe mir mit https://www.youtube.com/watch?v=zMrP8heIz3g&index=6&list=PLs3KjaCtOwSbij6EOk7K-ZgKKcxH7yVHC Visual Studio Community 2017 installiert und mein aktuelles Projekt irgendwas mit W4 (? finde die Compilereinstellungen nicht mehr) kompiliert. Die Warnungen beseitigt und dann noch mal mit Tidy-Code und soweit dessen Warnungen beseitigt.

    Dann die Source-Files in ein Projekt in CodeBlocks kopiert und mit gcc kompiliert (finde ich jetzt auch nicht die Versionsangabe) und zwar mit
    [Wall]
    [-Weffc++]
    [-Wextra]
    und soweit diese Warnungen beseitigt.

    Bei einigen Warnungen wußte ich nicht warum und wie ich sie beseitigen soll.
    In Tidy-Code dieser Konstruktor

    Charset( const std::string& name ) : charset_name( name )
    {
        readCharset( charset_name );
    }
    

    Clang:pass by value and use std::move Wo ich nicht wirklich weiß, was das bedeutet und sonst bei allen Funktionsprototypen Clang:all parameters should be named in a function . Warum soll man das bei Prototypen machen?

    In gcc wird ausschließlich unter [-Weffc++] beinahe jede Klassenmembervariable angemeckert, die nicht im Konstruktor initialisiert wird.
    warning: ... should be initialized in the member initialization list [-Weffc++]|

    Beispiel diese einfache Klasse, die ein einfaches AsciiArt einliest und ausgibt:

    class AsciiArt
    {
    
    public:
    
        AsciiArt ( const std::string& name ) : artname( name )
        {
            readArt( artname );
        }
    
        std::size_t getSize() const;
        int getWidth() const;
        int getHeight() const;
        void printArt( int, int, WORD, WORD );
    
    private:
    
        std::string artname;
        int width = 0;
        int height = 0;
        std::vector<std::string> char_rows;
        void readArt( const std::string& );
    };
    

    Dort wird char_rows angemeckert. Das ist ein vector aus strings der in readArt() gefüllt wird, wobei der string einfach nur eine Zeile der AsciiArt ist. Wie sollte ich das ändern und sollte ich überhaupt?

    Danke.