Fehler beim Suchen von einer corkompilierten Header-Datei



  • Danke, jetzt klappt es, hatte ausversehen stdfax statt stdafx geschrieben.
    Könntet ihr mir noch meine 2. und 3. Frage beantworten?
    Und wofür ist die stdafx.h gut bzw. was steht da drin?



  • is nur ne konfigurationsdatei in der der assistent alle nötige einstellt/einbindet



  • @Sovok: nicht ganz 😉

    "Vorkompilierte Header" beschleunigen die Übersetzung. Dazu sollte stdafx.h Header_Dateien einbinden, die in den meisten Projektdateien vorhanden sind und sich nicht (oder nur selten) verändern.

    Hintergrund:
    Wenn ein C++-Programm übersetzt wird, nimmt der Compiler sich jede CPP-Datei einzeln vor, und übersetzt das, was drin steht. der Linker bindet dann die "Ergebnisse" jeder .cpp - Datei zu einer .exe (oder .dll oder was auch immer) zusammen. #include's funktionieren dabei wie reiner Textersatz.

    Wenn man mit größeren Bibliotheken (z.B. der WinAPI oder der MFC) arbeitet, müssen für jede .cpp-Datei eine Menge Header-Dateien abgearbeitet werden. Um das zu beschleunigen, gibt es vorkompilierte Header: Der Compiler merkt sich die kompletten Symboltabellen der Header-Dateien, und muß die #includes nicht wiederholt abarbeiten. Das geht natürlich nur, wenn die Header in der gleichen Reihenfolge (und mit absolut identischen voranstehenden Deklarationen, #defines usw.) #includiert werden.

    Diese Symboltabellen werden aber ziemlich groß (.pch bei C++, ein paar MB für ein Windows/MFC - Projekt), von daher sind dem vorkompilieren Mengengrenzen gesetzt.

    Visual C++ macht nun (mit den Assistenten-Standardeinstellungen) folgendes:

    - in stdafx.h kommen alle header, die vorzukompilieren sind
    - In den projekteinstellungen wird für stdafx.cpp "vorkompilierte header aus dieser Datei erstellen" gesetzt
    - Für alle .cpp anderen Dateien (und als default für neue) wird "vorkompilierte Header aus stdafx.h verwenden" gesetzt
    - Beim Übersetzen wird als erstes stdafx.cpp übersetzt (natürlich nur wenn die .pch fehlt oder sich etwas geändert hat)
    dabei wird die .pch - Datei erzeugt
    - bei allen anderen .cpp dateien für die "votrkompilierte header verwenden" eingestellt ist, wird nach dem ersten auftauchen
    von #include "stdafx.h" (oder dem entsprechenden header) gesucht. Wenn es gefunden wird, wird die .pch-Symboltabelle "angenommen" und weiter
    übersetzt

    ACHTUNG: zumindest VC6 ignoriert z.B. #defines vor dem #include "stdafx.h" völlig!

    Da damit stdafx.h als allerersteDatei in allen .cpp - Dateien #includiert werden muß, ist es auch ein bequemer Platz um globale Projektdefinitionen unterzubringen.



  • Vielen Dank, dann macht diese Datei auch Sinn 🙂

    Könntet ihr mir noch folgendes beantworten:

    Wofür steht eigentlich bei den Funktionen int WINAPI WinMain (); dieses WinAPI
    ich habe bisher noch nie so etwas gesehen (hab nur für die Konsole programmiert)
    da sehen die Funktionen normal so aus int main ();

    Noch etwas, wie kann ich die Zeilenzahlen einschalten?



  • rechtsklick auf das wort->gehe zu definition von ...

    -> #define WINAPI __stdcall



  • In der Statusleiste hast du Zeilen und Spaltenanzeige.



  • estartu_de schrieb:

    In der Statusleiste hast du Zeilen und Spaltenanzeige.

    Heißt das, dass ich niemals direkt in eine Zeile 153 gehen kann ohne auf jede Zeile
    zu klicken und schauen wie weit ich bin?
    Die werden für den schmalen Rand neben dem weißen Blatt doch wo eine Option haben
    um Zeilennummern einzublenden, das kann doch wirklich jeder richtige Editor oder
    jede IDE



  • strg+g -> nummer eingeben



  • Gibt es in neueren Versionen, Zeilennummern?
    Sonst muss ich es mir doch mal gründlich überlegen ob ich mir nicht lieber
    den BCB hole(hoffe der hat sowas, weiß das wer?).



  • Visual Studio .NET kann Zeilennummern anzeigen.



  • @SirLant
    Ich weiß ja nicht, wofür du's brauchst, aber Zeilennummernanzeige ist m.E. ein sehr schwaches Kriterium. An Compiler-Fehler usw. kommst du mit doppelklick oder F4 ran, für externe Tools kannst du das oft ähnlich einstellen, und wenn du mal auf eine Zeile springen mußt - Ctrl-G (selbst das brauch ich selten...)



  • Finde es einfacher, da ich so schnell durchscrollen kann, aber wenn die neuen
    Versionen das haben ist es eh kein Thema für mich.


Anmelden zum Antworten