C++ fuer Windows und Linux entwickeln
-
Servus,
mit Java fand ich es ja super, dass ich einmal Code schrieb und dieser (meist) ohne große Umwege auch auf einer anderen Plattform lief. Jetzt zupf ich hier unter Linux und Netbeans mein C++-Zeugs zusammen und wollte generell mal abklären, wie ich den Code unter Windows ans Laufen bekomme. Unter Linux habe ich ja den gcc, ich las dass wohl mittels cygwin da was gehen könnte. Windows-Entwickler nutzen wohl eher den Weg Visual-Studio samt MS-Compiler. Neben der Frage, wie am Schluss der Code kompiliert wird, interessiert mich natürlich auch, was beim Programmieren zu beachten ist, etwa welches Gui-Toolkit oder ob man für beide Hauptplattformen den Code unterschiedlich schreibt. Um passend zu starten, bin ich zu Beginn erstmal an einer Konsolenanwendung interessiert. Als Laie muss ich aber sagen, dass Plattformunabhängigkeit und C++ für mich bis jetzt wie ein Buch mit sieben Siegeln klingt.
Also wie macht ihr es, wenn ihr wisst, dass ihr die (Konsolen-)Software unter Linux entwickelt, diese aber unter Windows und Linux laufen soll?
-
Einfach streng an den Standard halten? Dazu ist er schließlich da. Falls du Standardfragen hast, können die hier im Forum in der Regel sehr gut beantwortet werden.
Und falls man wirklich mal eine externe Bibliothek benötigt, dann muss man eben drauf achten, dass es sie auf beiden Plattformen gibt.
-
Wenn du spezifische Sachen brauchst musst du halt beiden Code schreiben. (magisches Mittel dazu ist #ifdef und Konsorten, womit du die Generierung steuern kannst).
Also z.B:void do_something() { #ifdef WINDOWS call_windows_function(); #elseif LINUX call_linux_function(); #else // wird nicht unterstützt #endif }(Wobei das natürlich nicht unbedingt die korrekten Makros sind)
-
Versuch die WinAPI/POSIX API zu vermeiden.
Einfach STL + Boost (oä.) + Qt (Oder ein anderes GUI-Framework deiner Wahl, wx würde sich zb auch gut anbieten).
-
Ethon schrieb:
Einfach STL + [...]
Wieso nicht STD?
-
EOutOfResources schrieb:
Ethon schrieb:
Einfach STL + [...]
Wieso nicht STD?
Ja, ich verwende fälschlicherweise STL als Begriff für die ganze C++-Standardlibrary, die nicht komplett aus Templatecode besteht. Aber ich denke jeder weiß was gemeint ist.

Und hey, der C-Part (gibt es andere Teile, nicht komplett templated sind ?) wird sowieso von vielen gerne verdammt.
-
Ethon schrieb:
gibt es andere Teile, nicht komplett templated sind ?
STD:
- STL: Container, Iteratoren, Algorithmen
- Streams: Sollte klar sein
- Sonstiges: Der Rest eben (u.a.
std::string, Lokale, Exceptions, ...) - CSTD: Standard-Bibliothek aus C
-
EOutOfResources schrieb:
Sonstiges: Der Rest eben (u.a.
std::string, Lokale, Exceptions, ...)std::string ist auch ein Template.

-
wxSkip schrieb:
EOutOfResources schrieb:
Sonstiges: Der Rest eben (u.a.
std::string, Lokale, Exceptions, ...)std::string ist auch ein Template.

Die Streams sind auch Templates, gehören aber trotzdem nicht zur STL

-
wxSkip schrieb:
std::string ist auch ein Template.

Gehört aber nicht zur STL. Die Definition, dass alle Templates zur STL gehören, ist falsch.
-
EOutOfResources schrieb:
wxSkip schrieb:
std::string ist auch ein Template.

Gehört aber nicht zur STL. Die Definition, dass alle Templates zur STL gehören, ist falsch.
Ok.
-
wxSkip schrieb:
EOutOfResources schrieb:
Sonstiges: Der Rest eben (u.a.
std::string, Lokale, Exceptions, ...)std::string ist auch ein Template.

so'n kack! std::string ist ne klasse die aus einem klassen-template instanziiert wurde...
-
der_besserwisser schrieb:
wxSkip schrieb:
EOutOfResources schrieb:
Sonstiges: Der Rest eben (u.a.
std::string, Lokale, Exceptions, ...)std::string ist auch ein Template.

so'n kack! std::string ist ne klasse die aus einem klassen-template instanziiert wurde...
Hmm, ich dachte immer, das wäre 'n typedef...
-
typedef basic_string<char, char_traits<char>, allocator<char> > string; typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
-
Tachyon schrieb:
der_besserwisser schrieb:
so'n kack! std::string ist ne klasse die aus einem klassen-template instanziiert wurde...
Hmm, ich dachte immer, das wäre 'n typedef...
Das ist auch eine Art von Instanzierung...
-
Tachyon schrieb:
Hmm, ich dachte immer, das wäre 'n typedef...
Ja, aber es ist eben kein eigentliches Klassen-Template, sondern eine vollständige Instantiierung eines Templates und damit eine Klasse. Ich denke darauf wollte der_besserwisser hinaus. So oder so sind solche Haarspaltereien völlig irrelevant, die Standard Template Library umfasst nicht alles, was im Standard mit templates zu tun hat, Punkt.
-
Wenn es schon genau sein soll: die STL ist nicht Teil des Standards, sie ist lediglich Vorlage für bestimmte Teile darin.
-
pumuckl schrieb:
Tachyon schrieb:
Hmm, ich dachte immer, das wäre 'n typedef...
...sondern eine vollständige Instantiierung eines Templates und damit eine Klasse...
Doch Haarspalt...
Dann müsste man std::string ja auch vorwärtsdeklarieren können (ob man es darf ist 'ne andere Kanne Öl).
-
Tachyon schrieb:
Dann müsste man std::string ja auch vorwärtsdeklarieren können (ob man es darf ist 'ne andere Kanne Öl).
typedefs kann man nie forward-deklarieren. Egal ob sie auf "echte" Klassen oder template-instantiierungen gehen.
Oder willst du darauf hinaus, dass std::string keine Klasse, sondern eben nur ein typedef ist? Die gibts in der STL auch

-
Tachyon schrieb:
pumuckl schrieb:
Tachyon schrieb:
Hmm, ich dachte immer, das wäre 'n typedef...
...sondern eine vollständige Instantiierung eines Templates und damit eine Klasse...
Doch Haarspalt...
Dann müsste man std::string ja auch vorwärtsdeklarieren können (ob man es darf ist 'ne andere Kanne Öl).Vorsicht Spaltpiltz. Was soll std::string denn sonst sein, wenn keine Klasse?