008
27.05.2008, 21:15 Uhr
0xdeadbeef
Gott (Operator)
|
Das hat mit dem Compiler wenig zu tun. #include fügt ja auch bloß den Inhalt der entsprechenden Datei an der Stelle, an der es steht, ein, bevor der Kram zum Compiler geht. In deinem Fall ersetzt der fett markierte Teil die #include-Anweisung:
C++: |
//Quelldatei1 #include <iostream> #include <string> using namespace std;
void test(string const &);
int main() { // globale Variablen sind übrigens böse, pack das besser in main string line="Hallo";
test(line); cin.get(); return 0; }
|
...bei sinnvoller Aufteilung mit #include sieht das Ergebnis des Präprozessors ganz ähnlich aus. Nimm zum Beispiel mein Beispiel oben, da wird
C++: |
// main.cpp #include "echo.hpp"
int main() { echo("foo"); }
|
expandiert zu
C++: |
// main.cpp // echo.hpp #ifndef INCLUDED_ECHO_HPP #define INCLUDED_ECHO_HPP
#include <string>
void echo(std::string const &s);
#endif
int main() { echo("foo"); }
|
...und dann behandelt wie
C++: |
// main.cpp // echo.hpp
#include <string>
void echo(std::string const &s);
int main() { echo("foo"); }
|
...wobei "#include <string>" durch den Inhalt des Systemheaders string ersetzt wird, der je nach System unterschiedlich und aller Wahrscheinlichkeit nach ziemlich lang ist. (Compilerspezifische Einschübe der Einfachheit halber ausgelassen) Was dabei rauskommt, wird dann an den eigentlichen Compiler übergeben, der dir deine .o-Datei erstellt.
Du kannst dir übrigens ankucken, was der GNU cpp ausspuckt. Kompilier mal eine Source-Datei mit g++ -save-temps, dann schau in die .i-Datei. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 27.05.2008 um 21:17 Uhr von 0xdeadbeef editiert. |