Funktionsdeklarationen / Prototypen



  • Hallo,

    ich habe ein riesiges Projekt mit C- und C++-Code, das ich aufräumen soll.
    Neulich hatte ich einen Fehler, weil eine C-Funktion keinen Prototypen hatte
    und der Compiler daher int als Rückgabewert angenommen hat, obwohl
    dieser in der Definition der Funktion short war. Es war ein Ausdruck (while i < funktion()),
    wobei man im Assemblercode sehen konnte, dass Register verglichen wurden.
    Bei einer Zuweisung short z = funktion() trat der Fehler nicht auf.

    Es kam weder Compile- noch Linkerwarnung.
    Jetzt suche ich nach einer Möglichkeit, z.B. über eine Warnung beim Bauen,
    herauszufinden, bei welchen weiteren Funktionen der Prototyp fehlt, damit ich ihn
    ergänzen kann. Habe schon den halben Tag gegoogelt und nichts brauchbares
    gefunden. Bin für jeden Tipp dankbar.

    Danke und Gruß
    Christian



  • Dein Compiler warnt nicht? Was benutzt du?



  • Visual Studio 2017 , habe den Warnlevel schon auf 4 gestellt.



  • @Airbaer

    void f()
    {
            g();
    }
    
    

    cl /W3 x.c -c
    Microsoft (R) C/C++ Optimizing Compiler Version 19.15.26732.1 for x64
    Copyright (C) Microsoft Corporation. All rights reserved.

    x.c
    x.c(3): warning C4013: 'g' undefined; assuming extern returning int



  • Hallo manni66,

    VIELEN DANK!! Deine Zeilen haben mich auf die entscheidende Idee gebracht. 🙂

    Im Projekt habe ich eine Datei nowarnings.h gefunden, die u.a. folgende
    Zeilen enthielt:
    #pragma warning ( disable : 4013 4101 4018 4761 4244 4113 4786 )
    #pragma warning ( error : 4700 4715 4098 4033 4716 4553 4020 4552 4133 4047 4029 4028 4024 )

    Argh...

    Viele Grüße
    Christian



  • @Airbaer sagte in Funktionsdeklarationen / Prototypen:

    Hallo manni66,

    VIELEN DANK!! Deine Zeilen haben mich auf die entscheidende Idee gebracht. 🙂

    Im Projekt habe ich eine Datei nowarnings.h gefunden, die u.a. folgende
    Zeilen enthielt:
    #pragma warning ( disable : 4013 4101 4018 4761 4244 4113 4786 )
    #pragma warning ( error : 4700 4715 4098 4033 4716 4553 4020 4552 4133 4047 4029 4028 4024 )

    Argh...

    Viele Grüße
    Christian

    Das ist ein Kündigungsgrund.



  • @mgaeckler sagte in Funktionsdeklarationen / Prototypen:

    Das ist ein Kündigungsgrund.

    LOL. Das möchte ich mal sehen, dass jemand für sowas gekündigt wird.



  • Ich hab das eher so interpretiert, dass mgaeckler bei solchem Code lieber selber kündigen würde.
    Wär aber auch Quatsch. Je größer ein Projekt, desto mehr absurde Stellen wird man immer wieder finden. Selbst die Qt hatte Warnings deaktiviert, was bei uns an anderen Stellen mal Probleme gemacht hat.



  • @Airbaer
    Wie nett, es ist immerhin ein Header File und nicht irgend welche abstrusen Makefiles in denen die Warnings per Compilerflags abgewürgt werden. Leider, leider, findet sich so etwas in Software immer wieder. Und hohe Lizenzkosten für Produkte sind auch kein Schutz vor so etwas.