Eigene Compiler Warnung zu erzeugen



  • Hallo

    Ist es unter C++ möglich eine Compiler Warnung zu erzeugen ?
    Also ich meine das so wie unter C#.
    Da konnte man im Quellcode #warning "Ist zu überarbeiten" Warnungen erzeugen die der Compiler dann anzeigt. Geht das hier auch irgendwie ?

    Gruß



  • Probiers doch aus...
    Unter gcc jedenfalls erzeugt ein #warning eine Ausgabe



  • Beim MSVC-Compiler gibt's #pragma error, #pragma warning und #pragma message.



  • Hi

    Hab ich doch probiert...

    und wie ist der Syntax ?
    #pragma warning "Ist zu überarbeiten"
    bekomme ich warnungen wie:
    Warning 2 warning C4081: expected '('; found 'string' d:\_mywork\MyWork\MyWork.cpp 133
    Aber nicht den Text den ich möchte 😃

    #warning geht gar nicht ...

    Gruß



  • Ups, vertan, so sollte es aber gehen (MSVC):

    #pragma message( "Hello Mister Compiler" )
    #error C++ compiler required.
    

    Warnung ausgeben geht glaubich nicht.



  • martin_zi schrieb:

    #warning geht gar nicht ...

    "Geht garnicht" ist keine ausreichende Fehlermeldung.
    Es ist allerdings so, dass #warning eine Erweiterung ist, die von einigen (aber eben nicht allen) Compilern angeboten wird, aber eben kein Standard. Genauso ist #pragma warning nicht 100%ig portabel: laut Standard darf jeder Compilerhersteller sich #pragmas ausdenken, andere Compiler müssen sie aber nicht auswerten. Du kannst also problemlos ein "#pragma Wurstbrot" in deinen Code schreiben, Standardkonforme Compiler sollten es ignorieren, dürfen evtl. noch eine Warnung ausspucken (MSVC mosert IIRC was von "unknown #pragma"), dürfen aber nicht wegen unbekannter #pragmas das compilieren abbrechen.



  • Und wenn du die Datei und Zeilennummer noch rausschreibst, führt ein Doppelklick auf die Nachricht im Ausgabefenster zu der entsprechenden Datei&Zeile (bei MSVC mit pragma message):

    #pragma message( __FILE__ "(" PP_STRINGIZE(__LINE__) ") : " "Deine Nachricht" )
    
    // Mit
    #define PP_STRINGIZE2(a) #a
    #define PP_STRINGIZE(a) PP_STRINGIZE2(a)
    


  • ich meinte eigentlich "#warning" geht gar nicht ... 😃
    Weil er das Schlüsselwort nicht kennt.
    Error 3 fatal error C1021: invalid preprocessor command 'warning'

    Auch #pragma message( "Hello Mister Compiler" )
    funktioniert nicht ...
    Ich nutze übrigens MSVC2005 ...

    Auch das wird alles ignoeriert ...
    http://www.codeproject.com/KB/macros/location_pragma.aspx

    Muss ich vielleicht dazu irgend eine Option am Compiler aktivieren ?



  • martin_zi schrieb:

    Muss ich vielleicht dazu irgend eine Option am Compiler aktivieren ?

    Gut möglich. Dafür wäre allerdings eher die Compiler-Doku die richtige Anlaufstelle, bzw. das Compilerforum. Ich verschiebe mal...
    Am besten solche Infos wie den verwendeten Compiler immer gleich mitliefern, in diesem Fall sogar idealerweise gleich im Betreff.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • martin_zi schrieb:

    ich meinte eigentlich "#warning" geht gar nicht ... 😃
    Weil er das Schlüsselwort nicht kennt.
    Error 3 fatal error C1021: invalid preprocessor command 'warning'

    Nicht umsonst meinte "test_it", dass #warning beim gcc funktioniert.

    Auch #pragma message( "Hello Mister Compiler" )
    funktioniert nicht ...
    Ich nutze übrigens MSVC2005 ...

    Bei meinem MSVC2005 funktionierts. Optionen dazu sind mir nicht bekannt. Sicher, dass du die Ausgabe im Ausgabefenster nicht einfach übersiehst?



  • Jo hab ich sicher nicht übersehen. 🙄 Da steht nichts ...
    Mein Testprogramm ist nicht groß .. nur ein Simples "Hello World"

    Ich weiß was test_it geschrieben hat und mir ist klar dass er den gcc nutzt.
    Ich bezog die Aussage auf:
    "Geht garnicht" ist keine ausreichende Fehlermeldung.
    Nur um zu zeigen das ich meinte dass #warning nicht mal definiert ist ...



  • Wird denn irgendeine Warnung ausgegeben, dass am #pragma message irgendwas faul wäre? Oder erscheint einfach nur keine Ausgabe?



  • Nö es erscheint einfach keine Ausgabe.
    Daher dachte ich vielleicht das es an irgendwelchen Einstellungen liegt.
    Ich hab aber schon alles auf das maximum gestellt.

    Grüße ...



  • Dann lad doch mal irgendwo ein minimales Testprojekt mit allen nötigen Dateien hoch, was bei dir nicht funktioniert (Source- und Headerdateien, sln & vcproj-Dateien). Dann sieht man ja, ob's an den Einstellungen liegt.



  • Was heißt fuktioniert nicht?
    Schau mal in das Build Fenster rein. #pragma message erzeugt dort in jedem Fall eine Zeile!



  • Hallo

    Nun vielleicht reden wir aneinader vorbei ... 😕
    Ich spreche von der Error List. Da würde ich erwarten das diese Warning auch angezeigt wird.
    Im Output-Fenster erscheint die Nachricht ...
    Habe ich eben gesehen ...

    Gruß


  • Administrator

    int main()
    {
    #pragma message("Hello World!")
    }
    

    Dann steht im Outputfenster sowas:

    1>------ Build started: Project: TestProject, Configuration: Debug Win32 ------
    1>Compiling...
    1>main.cpp
    1>Hello World!
    1>Linking...
    1>LINK : ...Pfad.... not found or not built by the last incremental link; performing full link
    1>Embedding manifest...
    1>Build log was saved at "file://...Pfad...\Debug\BuildLog.htm"
    1>TestProject - 0 error(s), 0 warning(s)
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    

    Siehst du das "Hello World!"? Gleich nach "main.cpp".

    Von der Verwendung der Error List rate ich persönlich ab. Meistens steht nur ein Bruchteil der Fehlermeldung dort und die zusätzliche Filterung braucht man meistens nicht. Mit einem Doppelklick in der Linie im Output Fenster kommt man auch zur Zeile des Fehlers.

    Übrigens, hier noch einen Artikel zur Erzeugung von Warnings mit #pragma message. Es geht zwar mehr ums schöne Aussehen und der Artikel ist schon etwas älter, aber immer noch gültig:
    http://support.microsoft.com/kb/155196/en-us

    Grüssli



  • Dravere schrieb:

    Von der Verwendung der Error List rate ich persönlich ab.

    Gibt es eigentlich eine Möglichkeit dieses Teil dazu zu bringen nie mehr zu erscheinen? Ich finde es äußerst nervig wenn es immer wieder aufpoppt. Mir reicht ebenfalls das Ausgabefenster, ich möchte beim Arbeiten nicht ständig gegängelt werden.



  • Hmm

    Ja da sehe ich das ... Wie schon erwähnt dachte ich das der Eintrag dann auch in der Error List bei Messages steht 😞 ...
    Stimmt ist mir jetzt auch aufgefallen das da einiges gefilltert wird.
    Funktioniert doch anderes als ich dachte 🙄

    Kann man bei der Error List auch was konfigurieren ? Ich konnte nämlich nichts dazu finden...

    Auch gut das hilft schon mal ... Danke erstmal 😃

    Gruß
    Martin


Anmelden zum Antworten