Schlitzauge Geschrieben 16. April 2011 Geschrieben 16. April 2011 (bearbeitet) Hallo COM, ich habe mal eine Frage zum Thema plattformübergreifender Programmierung. Vorweg, JA, ich weiß, was Cross-Compiler sind, aber darum geht es nicht. Bsp. ich habe zwei gleichlautende Funktionen a(); sie unterscheiden sich lediglich ein wenig in Ihrer Ausführung, machen aber dasselbe. Während die eine Funktion für Windows-Systeme gemacht ist, ist die andere für Linux-Systeme gemacht. Nun würde ich gerne, beides unter einem Hut bingen, sprich, in die gleiche Header-/Quellcode/-Lib-Datei. Wie wir wissen, kann ein Kompiler, nicht ohne Weiteres, JEDEN Linux-optimierten Code, auch unter Windows kompilieren, auch nicht umgekehrt. Z.B. gerade dann, wenn am Bsp. die Windows-a()-Funktion intern auch noch auf WinAPI-Funktionen zurückgreift. Unter Linux, kann diese dann nämlich nicht kompiliert werden (von Wine-Ersatz mal abgesehen). Ich möchte aber auch nicht zwei extra Bibliotheken schreiben, eine für Windows, eine für Linux. Gibt es die Möglichkeit / Direktiven, Code zu kapseln, zu umschließen, ähnlich wie #ifndef, etc., der dafür sorgt, dass der Kompiler in Abhängigkeit des gerade verwendeten Systems, die richtige Funktion mit kompiliert und die andere einfach überspringt? Bsp. so hier: #if_System_Win a(); #ifend #if_System_Linux a(); #ifend Ich weiß, kein funktionierender Code nach allen derzeitigen Syntaxen. Soll ja nur verdeutlichen, was ich meine. Um es nochmal kurz zu fassen, schmeiß ich einfach mal die Frage im konkreten Detail in den Raum: Kann man einem Kompiler dazu verleiten, bei bestimmten Situationen, gewisse Codeschnipsel, einfach nicht mit zu kompilieren? Quasi wie Kommentar-Zeilen zu behandeln? Wenn nicht, was gibt es für Möglichkeiten, ähnliches zu realsiieren? THX im Voraus!!! Grüße Schlitzauge :) Bearbeitet 16. April 2011 von Schlitzauge Zitieren
Klischeepunk Geschrieben 16. April 2011 Geschrieben 16. April 2011 (bearbeitet) Klar, #ifdef XY #endif Deiner IDE teilst du mit welcher define für welches profil gesetzt wird. Voila. Bspw. #ifdef _MS_DOS_ oder #ifdef WIN32... Bearbeitet 16. April 2011 von Klischeepunk Code tags Zitieren
Schlitzauge Geschrieben 16. April 2011 Autor Geschrieben 16. April 2011 Betrifft dies nur IDE´s oder auch auf reinen Kompilerumgebungen bezogen? Ganz banal gefragt, mit obiger Lösung, würde der Kompiler bei Vorhandensein des einen Falls, z.B. WIN32, automatisch die anderen Codeschnipsel, z.B. des _MS_DOS_, überspringen, als wären es Kommentarzeilen? Kann man so Linux-optimierte UND Windows-optimierte Codes in eine Datei bringen oder ist das ganze doch nicht so einfach, wie es sich anhört? Grüße Schlitzauge :-) Zitieren
Klischeepunk Geschrieben 16. April 2011 Geschrieben 16. April 2011 Du wirst ihm halt wohl oder übel irgendwo die defines mitgeben müssen. Wie du das nun realisierst (einbinden einer Header, Compiler Flag, von hand #define WIN32 angeben, whatev) ist dir überlassen. Letztendlich muss dein Compiler wissen was er tun soll, sonst macht er Mist. Wie das bei deinem Compiler am komfortabelsten funktioniert sagt dir: Das Handbuch. Zitieren
lilith2k3 Geschrieben 16. April 2011 Geschrieben 16. April 2011 c - Windows and *nix compilation detection - Stack Overflow Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.