Kein return -> Compiler sagt nix?



  • Hallo,

    ich wundere mich über folgendes: Wenn ich in einer Funktion die einen wert zurückgeben soll kein return angebe meckert der compiler gar nicht. Erst wenn ich das flag -Wall eintippe kommt ein warning. Müsste das nicht ein error sein? Warum ist das so?

    hier ein minimalbeispiel welches aber durchaus auch kleiner hätte sein können.
    In der fun2() fehlt das return:

    #include <iostream>
    
    class A
    {
      public:
            double fun(const double & val)
            {
                    m_value = fun2();
            }
    
            double fun2()
            {
                    double val2 = 0.56;
    
                    val2;
            }
    
            double m_value;
    
    };
    
    int main()
    {
            A A_C;
    
            double val = 3.14;
    
            A_C.fun(val);
    
            std::cout << "Test of m_value: " << A_C.m_value << std::endl;
    
            double test = A_C.fun2();
    
            std::cout << "test: " << test  << std::endl;
    }
    

    Die membervariable und test haben beide den Wert "NaN". Mein Compiler ist
    der gcc 4.1.2:

    g++ -v
    Using built-in specs.
    Target: i686-pc-linux-gnu
    Configured with: /var/tmp/portage/sys-devel/gcc-4.1.2/work/gcc-4.1.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.2 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.2/info --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.2/include/g++-v4 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --disable-libgcj --with-arch=i686 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
    Thread model: posix
    gcc version 4.1.2 (Gentoo 4.1.2 p1.1)
    


  • Richtig. Sollte einen Error geben.
    Auch MSVC++ gibt nicht immer einen Error. (Wenn man ein return in einem if hat und sonst nichts, dann bekommt man aber immerhin noch eine Warnung).



  • öhm....was heißt das jetzt? Sich an die gcc-gemeinde wenden und vorschlagen?



  • Compiler wechseln. :p

    Naja, sich in der Community zu melden, wird wahrscheinlich nicht viel bringen. Hast du denn die neueste Version? Wenn du damit leben kannst, lässt du es so, wenn das wirklich so tragisch ist, siehst du dich eben nach einer anderen IDE um... 😉



  • uffob schrieb:

    öhm....was heißt das jetzt? Sich an die gcc-gemeinde wenden und vorschlagen?

    Ich nehme mal an, das gcc die gleiche Option wie MSVC anbietet: Warnungen als Fehler behandeln. Dies stelle ich bei mir Grundsätzlich ein, und wenn ich dann dann tatsächlich Warnungen bekomme die wirklich unrelevant sind (Was imho selten der Fall ist), dann stelle ich diese geziehlt und so lokal als möglich ab (in MSVC mittels pragma warning (+push/pop)).

    cu André



  • Warnungen sollten nicht ignoriert werden!!! Warnungen können potentielle Probleme sein.

    Deshalb alle Warnungen durch das Compiler-Flag einschalten. Daraufhin kann dann geprüft werden ob die Warnung relevant ist und behoben werden. Ggf. kann dann diese Warnungen (falls nicht relevant) durch ein #pragma deaktivieren.


Anmelden zum Antworten