_CRT_SECURE_NO_WARNINGS



  • Ich habe inzwischen in jeder cpp und .h Datei in der mir ein Warning gemeldet wird den folgenden code eingefügt

    #define _CRT_SECURE_NO_WARNINGS 1
    

    Die Warnungen der Art

    warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    c:\programme\microsoft visual studio 8\vc\include\stdio.h(345): Siehe Deklaration von 'sprintf'

    kommen jedoch noch immer.
    Was mache ich falsch, oder wie sollte ich es machen ?

    Matthias



  • Es heisst _CRT_SECURE_NO_DEPRECATE und _SCL_SECURE_NO_DEPRECATE, k.a. wie du bzw. dein Compiler auf _NO_WARNINGS kommst/kommt.

    Weiters gibts dann noch _CRT_NONSTDC_NO_DEPRECATE z.B. für Funktionen die nen führenden "" verpasst bekommen haben, wenn man die alten Namen ohne "" verwendet.

    Und:

    #define _CRT_SECURE_NO_DEPRECATE 
    #define _SCL_SECURE_NO_DEPRECATE
    // nicht:
    // #define _CRT_SECURE_NO_DEPRECATE 1
    // #define _SCL_SECURE_NO_DEPRECATE 1
    


  • hustbaer schrieb:

    Es heisst _CRT_SECURE_NO_DEPRECATE und _SCL_SECURE_NO_DEPRECATE, k.a. wie du bzw. dein Compiler auf _NO_WARNINGS kommst/kommt.

    VS2005 - und es kommt immer ausschließlich diese Warnung.

    Dein Code bewirkt auch keine Änderung.
    Eine Lösung habe ich damit noch immer nicht.

    Matthias



  • Du musst das ganz oben in deiner StdAfx.h einfügen.

    #define _CRT_SECURE_NO_WARNINGS
    

  • Mod

    Oder in die Präprozessor Optionen des Projektes!



  • Ich arbeite selbst mit CV8 (aka 2005) - mit und ohne SP1, und ich hab' die Warnings immer mit _CRT_SECURE_NO_DEPRECATE/_SCL_SECURE_NO_DEPRECATE wegbekommen.

    Ich hab ein wenig gegoogelt und anscheinend ist _CRT_SECURE_NO_WARNINGS "the new way of doing it" - der aber laut einigen Postings in Foren/Mailinglisten nicht wirklich funktioniert, zumindest nicht immer.

    Muss aber natürlich definiert werden bevor du die entsprechenden Headers inkludierst.



  • also ich habe das gleiche Problem, er meckert die ganze zeit ich soll fopen_s nehmen aber das will ich in meinem Fall halt nicht. ich habe bereits im Preprocessor eingefügt, an den anfang geschrieben mit #define _CRT_SECURE_NO_WARNINGS und auch mit #define _CRT_SECURE_NO_DEPRECATE aber nichts hat geholfen.



  • Ich hatte das gleiche Problem. Meine Lösung war nach dem #include … den Befehl: #pragma warning(disable : 4996) zu schreiben. Falls bei der Fehlerausgabe ein anderer Fehler kommt wie z.B. 4998 oder weiss ich was einfach statt 4996 schreiben.

    Dave



  • Eine aktuelle Lösung wäre (für Visual Studio) in den Projekteigenschaften bei Preprozessor dort _CRT_SECURE_NO_WARNINGS eintragen.



  • @DavmineHD sagte in _CRT_SECURE_NO_WARNINGS:

    Ich hatte das gleiche Problem. Meine Lösung war nach dem #include … den Befehl: #pragma warning(disable : 4996) zu schreiben. Falls bei der Fehlerausgabe ein anderer Fehler kommt wie z.B. 4998 oder weiss ich was einfach statt 4996 schreiben.

    Dave

    Klar, das geht. Ist aber ziemlich unscharf, da du damit alle deprecation Warnings abdrehst. _CRT_SECURE_NO_WARNINGS & Co sind da ganz klar besser.


  • Mod

    Ich würde das immer im Code eintragen.
    Der Holzhammer pragma ist meines Erachtens hier nicht geeignet, wie DavmineHD schon schrieb.
    Auch die Projektseinstellungen erscheinen mir nicht transparent.
    Im Code (stdafx.h,pch.h) kann man schreiben warum man die unsichere Variante nutzt...

    Ansonsten ist es nicht schwer die _s Varianten zu nutzen.

    Just my 2 cents



  • @Martin-Richter sagte in _CRT_SECURE_NO_WARNINGS:

    Ich würde das immer im Code eintragen.

    Yep.
    Das nennt man auch Wartungsfreundlichkeit von Code.
    Also als 1. Zeile ins main/WinMain Modul und nicht im Header.


Log in to reply