Was ist “stdafx.h" verwendet, für die in Visual Studio?
Einer Datei mit dem Namen stdafx.h
wird automatisch generiert, wenn ich ein Projekt in Visual Studio 2010. Ich brauche, um eine cross-Plattform C++ - Bibliothek, so dass ich nicht/kann nicht, verwenden Sie diese header-Datei.
Was ist stdafx.h
verwendet? Ist es OK, dass ich einfach entfernen Sie diese header-Datei?
- Wenn ich compile-Fehler mit Bezug zu stdafx.h, ich in der Regel setzen Sie die Einstellungen auf " nicht erstellen oder verwenden Sie diese Datei..
- Artikel: StdAfx.h für Anfänger - viva64.com/en/b/0265
- Sie können die header-Datei nur in Ordnung, auf anderen Plattformen, auf Ihnen ist nur ein normaler header-Datei. Es bietet keine performance-Vorteil entstehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle C++ - Compiler haben eine ernsthafte performance-problem zu behandeln. Kompilieren von C++ - code ist ein langer, langsamer Prozess.
Kompilieren der Header oben auf der C++ - Dateien ist ein sehr langen, langsamen Prozess. Zusammenstellung der riesige header-Strukturen, die Teil des Windows-API und andere große API-Bibliotheken ist ein sehr, sehr langen, langsamen Prozess. Zu haben, es zu tun über und über, und über, die für jeden einzelnen Cpp-Quellcode-Datei ist eine Totenglocke.
Dies ist nicht nur Windows, sondern ein altes problem von allen Compilern zu kompilieren gegen eine große API wie Windows.
Den Microsoft-compiler verbessern kann dieses problem mit einem einfachen trick vorkompilierte Header. Der trick ist ziemlich glatt: obwohl jede CPP-Datei kann potenziell und rechtlich geben eine leicht unterschiedliche Bedeutung an die Kette der header-Dateien enthalten, die auf der Oberseite jeder Cpp-Datei (durch Dinge wie verschiedene Makros #define hatte im Vorfeld der beinhaltet, oder indem Sie die überschriften in einer anderen Reihenfolge), das ist meist nicht der Fall. Die meisten der Zeit, wir haben Dutzende oder Hunderte von Dateien enthalten, aber Sie alle sollen die gleiche Bedeutung für alle Cpp Dateien kompiliert werden, die in Ihrer Anwendung.
Kann der compiler machen große Zeitersparnis, wenn Sie nicht haben, um starten zu kompilieren jede Cpp-Datei plus deren Dutzende enthält buchstäblich von Grund auf neu jedes mal.
Der trick besteht in der Angabe einer speziellen header-Datei als Ausgangspunkt für alle compilation-Ketten, den so genannten "vorkompilierte header" - Datei, die üblicherweise eine Datei mit dem Namen stdafx.h einfach historische Gründe.
Einfach Liste alle Ihre große riesige überschriften für Ihre APIs in Ihre stdafx.h-Datei, in der entsprechenden Reihenfolge, und starten Sie dann jeweils Ihre CPP-Dateien an der Spitze mit einem
#include "stdafx.h"
, bevor irgendwelche sinnvollen Inhalt (nur über die einzige Sache, die erlaubt, vor den Kommentaren).Unter diesen Bedingungen, statt der Ausgangspunkt von Grund, startet der compiler das kompilieren aus den bereits gespeicherten Ergebnissen der Zusammenstellung alles in
stdafx.h
.Ich glaube nicht, dass dieser trick ist einzigartig für Microsoft-Compiler, noch glaube ich, es war eine original-Entwicklung.
Für Microsoft-Compiler, die Einstellung, die steuert, die Verwendung von vorkompilierten Headern gesteuert durch ein Kommandozeilen-argument an den compiler:
/Yu "stdafx.h"
. Wie Sie sich vorstellen können, die Nutzung derstdafx.h
Dateiname ist einfach eine Konvention; Sie können den Namen ändern, wenn Sie dies wünschen.In Visual Studio 2010, diese Einstellung wird gesteuert, von der GUI über Rechts-Klick auf ein CPP-Projekt, die Auswahl von "Eigenschaften", und navigieren Sie zu "Configuration Properties\C/C++\ "Vorkompilierte Header". Für andere Versionen von Visual Studio, die Lage in der GUI anders sein wird.
Beachten Sie, dass, wenn Sie deaktivieren Sie vorkompilierte Header (oder führen Sie Ihr Projekt durch ein Werkzeug, der keine Unterstützung), ist es nicht dass das Programm illegal ist; es bedeutet einfach, dass Ihr tool kompilieren wird alles von Grund auf neu jedes mal.
Wenn Sie erstellen eine Bibliothek mit keine Windows-Abhängigkeiten, können Sie ganz einfach auskommentieren oder entfernen von #include aus der stdafx.h-Datei. Es gibt keine Notwendigkeit, entfernen Sie die Datei per se, aber klar können Sie das auch tun, indem Sie den precompile-header-Einstellung oben.
#include "stdafx.h"
? Sicher, aber das ist nur ein standard #include. Die "MS-Erweiterung" Teil ist nur ein compiler, performance-Optimierung; es ändert nichts an der Semantik, dass eine header-Datei, die zufällig den Namen "stdafx.h". Beachten Sie, dass, wenn Sie entfernen Sie die include-und der code wird davon abhängen, alles, was über stdafx.h, sind Sie gehen zu müssen, um Sie direkt.#include
Sie in der Quell-Datei (von den selben 'Präprozessor' Schritt, wertet Makros). Die resultierende Gesamtgröße der Datei wird dann an den eigentlichen compiler, der sieht nie eine header-Datei als eine separate Einheit. Sie setzen nur Erklärungen header-Datei, weil das ist, was funktioniert gut auf eine header-Datei - dies ist eine verbreitete Regel. Probieren Sie es aus! Erstellen Sie eine header-Datei mit einem Programm, dann erstellen Sie eine Quelldatei, die nur über eine #include für Sie. Es kompiliert einwandfrei.#pragma once
?"): Nein. Pre-compiled Header und#pragma once
sind orthogonale Konzepte. Vorkompilierte header ist ein optionaler Zusammenstellung der performance-Optimierung, das macht null änderungen an der Semantik der source-code.#pragma once
änderungen an der Semantik einer include-Datei, so dass es eingefügt werden kann, die mehrfach in einer compilation unit und es wird nur dann wirksam, das auf den ersten Einfügepunkt. Keine Beziehung.info gcc
und die KnotenPrecompiled Headers
informiert werden, die Sie über Gebäude, einschließlich Ihnen, und wie zu bauen, und verwenden Sie separate debug-und release-build-Versionen in einem Verzeichnis. Oder siehe gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.htmlEs ist ein "vorkompilierte header-Datei" -- alle Header in stdafx.h vorverarbeitet, um Zeit zu sparen während der nachfolgenden Zusammenstellungen. Lesen Sie mehr über es hier auf der MSDN-Website.
Wenn Sie ein cross-Plattform-Anwendung, überprüfen Sie "Leeres Projekt", wenn Sie die Erstellung Ihrer Projekt-und nicht Visual Studio legen Sie alle Dateien in Ihrem Projekt.
"Stdafx.h" ist ein vorkompilierter header.Es include-Datei für standard-system-include-Dateien und Projekt-spezifische include-Dateien, die Häufig verwendet werden, aber geändert werden, selten.das reduziert die compile-Zeit und Unnötige Verarbeitung.
Vorkompilierte Header stdafx.h ist im Grunde verwendet, die in Microsoft Visual Studio zu lassen, der compiler, der Dateien nach der Kompilierung und keine Notwendigkeit, um es zu kompilieren from scratch.
Lesen Sie mehr über es
http://www.cplusplus.com/articles/1TUq5Di1/
https://docs.microsoft.com/en-us/cpp/ide/precompiled-header-files?view=vs-2017
Ich lief einfach in dieser mich, da ich versuche zu schaffen, mir ein bare bones framework, sondern begann, indem Sie eine neue Win32-Programm-option in Visual Studio 2017. "stdafx.h" ist unnötig und sollte entfernt werden. Dann können Sie entfernen das dumme "stdafx.h" und "stdafx.cpp" das ist in Ihrem Solution Explorer, sowie die Dateien aus Ihrem Projekt. In ihm Platz, werden Sie brauchen, um
statt.