Wie kann ich den Header identifizieren, der eine Warnung generiert?

7

Ich bin sicher, dass viele von Ihnen mit diesen Warnungen vertraut sind. Diese werden meistens von einer Include-Datei generiert. Lösung ist pragma push/disable/pop , aber das Identifizieren des Headers ist keine nette Aufgabe.

Kennt jemand eine Möglichkeit, die Kopfzeile außer Trial-and-Error zu identifizieren?

%Vor%     
cprogrammer 05.05.2011, 09:05
quelle

7 Antworten

13

In meinem Fall wurde das Verschieben von #include <strsafe.h> an den unteren Rand der Liste die Warnung ohne zusätzliche Compiler-Direktiven loswerden.

Eine gute Möglichkeit, herauszufinden, wo #pragma deprecated aufgerufen wurde, war, in die Compilereinstellungen unter "Präprozessor" zu gehen und Vorverarbeitete Datei erstellen auf etwas wie Mit Zeilennummern ( / P) . Erstellen Sie neu, öffnen Sie dann die * .i-Datei und suchen Sie nach deprecated . In der Nähe befindet sich der Name des beanstandeten Includes.

Ich verwende VS2003, so dass die Dialoge für Sie leicht abweichen können.

    
Celdecea 07.06.2011, 07:03
quelle
4

Die Standard-Include-Dateien sollten Wächter enthalten. Sie können also möglicherweise diese Dateien explizit in die oberste Ihrer eigenen Datei einfügen, wobei diese Warnung deaktiviert ist:

%Vor%

Auf diese Weise werden die Warnungen für die Header deaktiviert, von denen Sie wissen, dass es Probleme gibt. Dies muss oben in Ihrem Code sein, damit die Header zum ersten Mal in den Abschnitt mit deaktivierter Warnung aufgenommen werden.

    
Greg Hewgill 05.05.2011 09:36
quelle
2

Ich würde gerne sagen, was @Celdecea gesagt hat.

Offensichtlich wäre es nett, wenn MS das tun würde, was GCC macht, und den Pfad (Stack?) für die Datei angegeben, von dem ich vermute, dass es das ist, nach dem Sie gesucht haben; Leider konnte ich dazu keine Compiler-Direktive finden, daher war das Überschreiben der .i-Datei ein schmerzhafter aber effektiver Ersatz.

Ich habe auch festgestellt, dass mein Problem auf das Hinzufügen von #includes nach <strsafe.h> zurückzuführen ist. Da meine Fehlerliste (fast?) Mit Ihrer identisch ist, wäre ich nicht überrascht, wenn das auch Ihr Problem löst.

Wenn nicht, oder wenn Sie den pragma push/disable/pop -Stil verwenden möchten, dann scheint @Greg die beste Lösung zu sein, um präventiv und explizit diejenigen Header zu definieren, die Ihnen Schmerzen bereiten.

    
Lee K-A 24.08.2011 18:37
quelle
0

Um zu Greg Hewgills Beitrag hinzuzufügen, habe ich das Problem im Set gefunden und diese Datei nicht vermutet.

%Vor%

Das oben genannte löste mein Problem.

    
Ram 28.02.2012 07:21
quelle
0

Die Hinweise zu #include strsafe.h schließe die Zeile ein:

  

Um die Strsafe-Funktionen inline zu verwenden, fügen Sie die Header-Datei wie hier gezeigt hinzu, nach den # include-Anweisungen für alle anderen Header-Dateien.

In der MSDN-Offline-Hilfe heißt es:

  

Wichtig: Die Include-Zeile für strsafe.h sollte den Include-Zeilen aller anderen Header folgen.

Stellen Sie sicher, dass Sie nur in cpp-Dateien und nach allen anderen C ++ - Bibliothek-Header-Dateien enthalten sind und die Warnungen verschwinden.

Kevin

    
Springheeledjack 29.03.2013 12:58
quelle
0

Setzen Sie in Visual Studio 2010 (und wahrscheinlich auch in anderen Versionen) die Option "show includes" von C ++ / advanced auf Yes oder fügen Sie die Befehlszeilenoption / showIncludes hinzu.

Dann kompilieren Sie jeweils eine Datei und durchsuchen Sie das Build-Ausgabefenster nach der gesuchten Warnnummer und es wird die Baumstruktur der Include-Dateien angezeigt, die diese Warnung erzeugen.

Diese Technik ist nützlich für die meisten Build-Probleme, die durch Include-Dateien verursacht werden.

BEARBEITEN: Stellen Sie sicher, dass Sie / showIncludes ausschaltet, wenn das Problem behoben ist, da es andere Compileroptionen beeinträchtigen kann (z. B. / MP (Build with Multiple Processes) ist deaktiviert).

Um die Warnung zu unterdrücken, fügen Sie die störenden Include-Dateien zu einem 4995-Unterdrückungsblock hinzu, wie oben von Greg Hewgill vorgeschlagen. Dies kann entweder an der Spitze der Quelldatei oder in einem vorkompilierten Header oder in einer "erzwungenen" Include-Datei sein, die im gesamten Projekt enthalten ist (C ++ / Advanced / Erzwungene Include-Datei).

Das besondere Problem mit 4995 CRT-Versetzungsfehlern besteht darin, dass sie scheinbar jedes Mal generiert werden, wenn Code veraltete Funktionen aufruft, selbst wenn die Warnung 4995 unterdrückt wurde, als die veralteten Funktionen deklariert wurden.

    
persiflage 30.05.2015 15:31
quelle
0

In meinem Fall für VS2008 stammten diese Warnungen von #include <vector> (oder einer anderen std -Bibliothek). Es scheint, dass Microsoft ihren eigenen Ratschlägen nicht folgen kann.

Bei der folgenden Vorgehensweise wurde das Problem behoben:

%Vor%

Stelle sicher, dass du es so früh wie möglich in deinen Includes machst.

    
c00000fd 14.06.2015 04:19
quelle

Tags und Links