#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.


Anmelden zum Antworten