Ich habe in der Vergangenheit Probleme bekommen, wenn ich versucht habe, C++ - Code, der auf Mac OS X geschrieben wurde, auf ein Linux-System zu portieren oder Code gegen eine ältere Version von gcc/g ++ mit einem neueren zu kompilieren:Wie kann ich kontrollieren, wie gcc/g ++ automatisch Header enthält?
Es scheint, dass einige (ältere?) Versionen von gcc/g ++ automatisch einige Header-Dateien für Sie enthalten würden.
Zum Beispiel sollte Code, der printf
verwendet, #include <stdio.h>
erfordern. Und Code, der memcpy
verwendet, sollte #include <string.h>
erfordern. Aber abhängig von der Version von GCC, die ich verwende, wird es gelegentlich für mich enthalten.
Es verheerend, wenn ich vergesse, etwas einzubinden und dann bekomme nie Fehler bis ich gehe, um den Code auf einem anderen System zu kompilieren. An diesem Punkt ist es ein Spiel, das über das ganze Projekt läuft und die Includes festlegt.
Hat jemand anderes in das hineingeraten? Gibt es eine Möglichkeit, gcc zum automatischen oder automatischen Ausschluss zu zwingen? Oder gibt es eine Möglichkeit zu wissen, was es ist autoincluding?
Kann sein, wenn gcc funktioniert es automatisch wäre es zu subtil geworden für sie dieselben Methoden Namen in verschiedenen Bibliotheken zu verstehen. Aber wenn es eine automatische Lösung gibt, würde ich es gerne wissen. –
Sind Sie sicher, dass es nicht andere Header sind, die diese einbeziehen, und auf den anderen Plattformen nicht? –
gcc nicht "automatisch einbeziehen" - Sie erhalten wahrscheinlich nur indirekte Includes über Header, die Sie explizit eingeschlossen haben, wie oben von Preet vorgeschlagen. Fazit: Sie müssen Ihren Code reparieren. –