Betriebssystemerkennung durch Präprozessor (Split aus Dynamische Speicherallokation)
-
Makros ? Was heißt das in dem Zusammenhang ?

Wie soll ich dann eig auch eine Ausgabe bekommen, da ja nichts für Windows festgelegt wurde, sondern nur für die "erfundenen Betriebssysteme ?@DocShoe: Ok sorry hatte nicht drangedacht :-/.
Werde ich beim nächsten Problem machen.
-
silent12 schrieb:
Makros ? Was heißt das in dem Zusammenhang ?

Wie soll ich dann eig auch eine Ausgabe bekommen, da ja nichts für Windows festgelegt wurde, sondern nur für die "erfundenen Betriebssysteme ?Was der Präprozessor mit
#if defined(...)überprüft, ist "nur" die Existenz eines Präprozessor-Makros. Das kann am Anfang des Quelltexts per#definepassieren, per Compiler-Option "-DKuhnix_BSE" oder implizit durch den Compiler selbst.
-
Aber warum wird deshalb gar nichts ausgegeben ?
-
silent12 schrieb:
Aber warum wird deshalb gar nichts ausgegeben ?
Nachdem der Präprozessor mit deinem Code durch ist, bleibt dies übrig:
// [Inhalt von iostreasm] using namespace std; int main() { system("Pause"); }Da weder __KuhnixBSE __ noch __HastaLaVista__ noch sonst einer der Bezeichner gesetzt wurden, ist alles was in einem
#if definedBlock stand gestrichen worden.
-
Achso, das heißt dass ich es nur ausgeben kann wenn ich es mit zB dem Datentyp int für Windows64bit schreibe oder ? Und was ist die von C++ definierte Abkürzung dafür ?
-
silent12 schrieb:
Achso, das heißt dass ich es nur ausgeben kann wenn ich es mit zB dem Datentyp int für Windows64bit schreibe oder ? Und was ist die von C++ definierte Abkürzung dafür ?
Sind dir die Grundprinzipien des Präprozessors vertraut? Ich habe den Eindruck, dir wurde 5x die gleiche richtige Antwort gegeben, die du aber einfach nicht verstehst.
-
So wie ich das verstehe wird erst geprüft welches Betriebssystem vorliegt und dann wird nur der Quellcode der in dem zugehörigen Absatz folgt an den Compiler weitergegeben, damit nicht unnötiger Quellcode compiliert wird.
Und in meinem Fall wird alles gelöscht da keins der Betriebssysteme vorliegt und deshalb alles in den Absätzen danach nicht compiliert wird.
Und deshalb wollte ich wissen wie die Abkürzung für Windows heißt. WIN32 ? oder ist das nur für Windows 32bit Systeme.
-
silent12 schrieb:
So wie ich das verstehe wird erst geprüft welches Betriebssystem vorliegt und dann wird nur der Quellcode der in dem zugehörigen Absatz folgt an den Compiler weitergegeben, damit nicht unnötiger Quellcode compiliert wird.
Und in meinem Fall wird alles gelöscht da keins der Betriebssysteme vorliegt und deshalb alles in den Absätzen danach nicht compiliert wird.
Und deshalb wollte ich wissen wie die Abkürzung für Windows heißt. WIN32 ? oder ist das nur für Windows 32bit Systeme.Das ist prinzipiell das was hier passiert. Aber nimm das nicht zu wörtlich, dass geprüft wird, welches Betriebssystem vorliegt. Es wird tatsächlich nur geprüft, ob ein Makro mit diesem Namen definiert ist. Viele Compiler setzen diese Makros in Abhängigkeit des Zielsystems. Leider ist nicht fest definiert, wie diese Makrobezeichenr lauten, aber wenn du keinen zu exotischen Compiler hast, dann lautet der Name
_WIN32.
-
Ah ok danke.
-
... und als kleinen Präprozessortest, kannst du dir ja mal überlegen, was folgender Code so macht:
#define TRUE '/'/'/' #define FALSE '-'-'-'