__declspec(nothrow)



  • Hi

    Ich habe ein Projekt welches in C++ 6 geschrieben wurde in meine .Net-Umgebung
    genommen. Beim Comipilieren kommt immer diese Warnung:

    warning C4290: C++-Ausnahmespezifikation ignoriert, es sei denn, es wird angezeigt, dass eine Funktion nicht __declspec(nothrow) ist
    

    Das ganze bezieht sich auf diese Zeile:

    public:
        /**
         * Execute
         * @return Error code
         * @exception exception On errors
         */
        Diese Zeile! ==> virtual int execute () throw (exception) = 0;
    };
    

    Was muss ich ändern, damit es richtig funktioniert???

    Vielen Dank für die Antworten!



  • mit

    #pragma warning( disable : 4290 )
    

    diese warnung ist eine der nutzlosen sorte. alternativ entfernst du das throw (exception)



  • Damit schaltest du nur die Warnung stumm - die Ursache ist noch da. ⚠

    Aber diese Vorgehensweise wird tatsächlich von der MSDN enpfohlen. 🙄

    Compiler Warning (level 3) C4290
    C++ Exception Specification ignored

    A function was declared using exception specification.

    At this time the implementation details of exception specification have not been standardized, and are accepted but not implemented in Microsoft Visual C++.

    Code compiled with ignored exception specifications may need to be recompiled and linked to be reused in future versions supporting exception specifications.

    You can avoid this warning by using the warning pragma:

    #pragma warning( disable : 4290 )



  • die Ursache ist noch da

    Es ist ja nichts böses was er getan hat.



  • Sorry, nachdem ich mal an ein Projekt gesetzt wurde, bei dem ALLE Warnungen abgeschaltet waren und das sehr unsauber programmiert war, bin ich da vorsichtig geworden.

    Den Nebensatz mit "nutzloen Sorte" hatte ich nicht gesehen.

    Da gingen jemandem wohl die hunderte von Warnungen auf den Geist und alle wunderten sich, warum das Programm auf kleine Änderungen sehr seltsam reagierte.

    Ich habe den Kram per grep sortiert und dann an den weitergegeben, dem ich helfen sollte.
    Seitenweise "kein Rückgabetyp angegeben, int wird angenommen" und so. *grusel*
    Gott sei Dank wurde ich wieder an mein altes Projekt zurückgerufen. 😃



  • Mir geht es ändlich!
    Habe das Projekt übernommen und sollte es in .NET weiternetwickeln!
    In Studio 6 kamen keine Warnungen oder Fehler im .NET wind es nun um die 400! Fast alle sind die gleichen (diese wie ich am Afang gefragt habe)

    Kann mir jemand sagen, was die Ursache ist, für diese Fehler????



  • estartu_de hat die Ursache bereits gepostet.

    Wer lesen kann ist klar im Vorteil.



  • Was bedeutet int wird angenommen????

    Meine Frage war eigentlich auch eher, wieso dass es in VS 6 funktionierte und im .NET nicht mehr?????



  • Was bedeutet int wird angenommen????

    ich dachte bei dir geht es um die C++-Ausnahmespezifikation?!



  • Höchstwahrscheinlich werden C++-Ausnahmespezifikationen auch in Visual C++ 6 ignoriert, es kommen halt nur keine Warnungen.

    *Diese* Warnung kannst du wirklich getrost ignorieren.



  • Yep, VC6 hat die Exception-Spec auch ignoriert (und evtl. schlechteren Code generiert 🙄 ), in VC7 isses ne Warnung.


Log in to reply