Ich weiß, dass mein Verständnis von #include oder wie es kompiliert wird, nicht korrekt ist, sonst würde der Code, den ich habe, funktionieren. Ich bin verwirrt, warum mein Code an zwei Stellen #include benötigt, um korrekt zu kompilieren und zu laufen.#include stdio Verwirrung ist es für jede Header-Datei benötigt?
Meine Haupt CPP-Datei armperfmon.cpp:
#include "armperfmon.h"
int main(int argc, char* argv[])
{
FILE* pOutFile = NULL;
PrintCounterOptions(pOutFile);
}
Haupt-Header-Datei armperfmon.h:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "counters.h"
void PrintCounterOptions(FILE* pFile);
an zweiter Stelle cpp enthält Funktion counters.cpp:
void PrintCounterOptions(FILE* pFile)
{
fprintf("print some stuff");
}
zweiten Kopf Datei für Funktionszähler.h
void PrintCounterOptions(FILE* pFile);
Der Fehler:
counters.cpp: error: 'FILE' was not declared in this scope
counters.cpp: error: 'pFile' was not declared in this scope
wenn ich #include <stdio.h>
in der Funktion CPP-Datei und geben Sie dann die Fehler weggeht und die Funktion kompiliert/ausführt, wie erwartet. Ich nahm an, dass in der main.h-Datei, wenn es <stdio.h>
enthielt, es für nachfolgende FILE * -Definitionen verfügbar wäre, besonders weil es vor counters.h enthalten ist. Wenn ich dies tippe, merke ich auch, dass das korrektere Include <cstdio>
ist. Wenn jemand klären könnte, was mit meinem Denkprozess nicht stimmt, würde es sehr geschätzt werden.
Ich habe die Dateinamen hinzugefügt. Beim Kompilieren, wenn jede Header-Datei cstdio enthält, wird sie nicht mehrfach hinzugefügt? – kaminsknator
@Kaminsknator: Ja. Für Deklarationen in der Kopfzeile ist das kein Problem (deshalb dürfen Sie mehrere Deklarationen für dieselbe Sache schreiben). Für Definitionen, die Sprache erlaubt es mit Vorsicht, und das ist etwas, mit dem der Linker zu kämpfen haben wird, aber es ist sehr gut dabei (weil das ist 50% seiner Arbeit). Das C++ - Kompilierungsmodell ist sicherlich nicht ideal, aber es ist von C geerbt und es funktioniert ziemlich gut. –
Also, wenn ich mir keine Sorgen machen muss, Dinge mehrfach einzutragen, warum gibt es Header-Wächter? – kaminsknator