#pragma warning



  • Hallo,

    ich benutze hier Visual Studio 2005 SE mit SP1.

    Nun habe ich folgendes Problem:
    Ich bekomme auf Warning Level 4 korrekterweise die Warnungen:

    Warnung 1 warning C4505: 'glutInit_ATEXIT_HACK': Nichtreferenzierte lokale Funktion wurde entfernt c:\glut\gl\glut.h 486
    Warnung 2 warning C4505: 'glutCreateMenu_ATEXIT_HACK': Nichtreferenzierte lokale Funktion wurde entfernt c:\glut\gl\glut.h 549

    Nun versuche ich, diese mit

    #pragma warning( push, 3 )
    
    #include <gl/glut.h>
    
    #pragma warning( pop )
    

    loszuwerden.
    Die Warnungen kommen aber immer noch...
    Wenn ich die Zeile mit dem pop weglasse, klappt es.

    Mache ich etwas falsch oder ist das ein Studio-Bug?

    P.S.: :schland: - Portugal 3:2 ­čśâ



  • Und wenn du es mit

    #pragma warning(disable:4505)
    

    probierst, um gezielt bestimmte Warnungen abzuschalten ?

    Hier noch der MSDN-Eintrag: http://msdn.microsoft.com/en-us/library/2c8f766e(VS.80).aspx

    Gr├╝├če, Xantus



  • Dann gibt es das gleiche Ph├Ąnomen.
    Das hatte ich auch zuerst probiert... ­čÖä



  • Diese Warnung wirst du AFAIK nicht selektiv ausschalten k├Ânnen. Also entweder f├╝r alle Funktionien anschalten oder f├╝r gar keine (der Compiler wei├č ja erst am Ende des Vorgangs, dass es was zu warnen gibt, und er merkt sich den Warninglevel nicht f├╝r jede Funktion).



  • Superlexx schrieb:

    Diese Warnung wirst du AFAIK nicht selektiv ausschalten k├Ânnen. Also entweder f├╝r alle Funktionien anschalten oder f├╝r gar keine (der Compiler wei├č ja erst am Ende des Vorgangs, dass es was zu warnen gibt, und er merkt sich den Warninglevel nicht f├╝r jede Funktion).

    1. Ich will die Warnung f├╝r den ganzen glut-Header abschalten, nicht f├╝r eine einzelene Funktion.
    2. Nat├╝rlich kann ich (normalerweise) f├╝r eine einzelne Funktion Warnungen abschalten. Man muss es nur vor der Funktion abschalten (au├čerhalb). Man kann das dann aber AFAIK innerhalb der Funktion wieder einschalten.
    3. Warum soll der erst am Ende wissen, was es zu warnen gibt? Der Compiler kann i.A. ein verd├Ąchtiges Konstrukt identifizieren, sobald er es ├╝bersetzt und nicht erst am Ende im Gesamtkontext.



  • Wie soll der Compiler denn, bevor er die Implementierungsdatei durchkompiliert hat, wissen, ob eine Funktion referenziert wurde oder nicht? Gar nicht, deswegen f├Ąllt es ihm erst am Ende auf. Und am Ende gilt nicht der Warninglevel, mit dem der Header eingezogen wurde, sondern der zuletzt hinterlassene (also z.B. was #pragma warning (pop) bei dir gepoppt hat).



  • Superlexx schrieb:

    Wie soll der Compiler denn, bevor er die Implementierungsdatei durchkompiliert hat, wissen, ob eine Funktion referenziert wurde oder nicht? Gar nicht, deswegen f├Ąllt es ihm erst am Ende auf. Und am Ende gilt nicht der Warninglevel, mit dem der Header eingezogen wurde, sondern der zuletzt hinterlassene (also z.B. was #pragma warning (pop) bei dir gepoppt hat).

    Da hast Du nat├╝rlich Recht. Ich hatte zu allgemein gedacht und diese spezielle Warnung, um die es eingentlich geht, aus den Augen verloren... ­čÖä
    Danke f├╝r das Wiederholungspost, jetzt hat es "klick" gemacht.
    F├╝r diese Warnung ist nat├╝rlich eine globale Betrachtung der Umst├Ąnde n├Âtig. Trotzdem Schade, dass man es nicht f├╝r eine einzelne Funktion ausschalten kann.



  • wieso willst du warnings ausschalten? es ist doch gut, wenn ein compiler warnungen ausgeben kann. so sieht man wenigstens, wo was schief laufen k├Ânnte.
    ­čÖé



  • Weil die Warnings h├Ąufig nur informativen Charakter haben und die Standardheader auf h├Âheren Warningstufen hundertfach Warnings produzieren, die man nicht sehen m├Âchte (die unwichtigen Warnings m├╝ssen unterdr├╝ckt werden, damit die wichtigen nicht untergehen).



  • ^^bei standardheadern ja, aber bei selbstgeschriebenen codes w├╝rde ich mich h├╝ten, warnings abzuschalten. ausser man jagt die codes durch 'lint'.
    ­čÖé



  • Warnungen sind nat├╝rlich sehr wichtig, aber glut.h ist ein Bibliotheks-Header und wenn der Warnungen produziert hilf mir das nichts.
    Deswegen schalte ich solche Warnungen ab, damit das Projekt warnungsfrei auf Warning Level 4 kompiliert und man wie Superlexx ja schon erkl├Ąrt hat, die "wichtigen" Warnungen nicht ├╝bersieht.

    Au├čerdem gibt es auch in selbstgeschriebenem Code Warnungen, die man unterdr├╝cken will.
    Z.B. wenn man mit (virtueller) mehrfach Ableitung arbeitet, kommen Warnungen a la "A erbt blub via Dominanz"...aber das will ich dann ja gerade auch erreichen.
    Keine Regel ohne Au├čnahme.
    Aber Du hast nat├╝rlich in soweit recht, dass man Warnungen nicht ohne Not abschalten sollte. Oft reicht es ja ein Konstrukt ein wenig umzuformulieren. Manchmal aber hilft dann halt aber nur der #pragma-Holzhammer.


Log in to reply