Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FalkT

Treue Seele

Beiträge: 125

Wohnort: AC

  • Private Nachricht senden

31

25.05.2009, 18:43

Re: Portierbarkeit des Codes

Zitat von »"Databyte"«


Welche Einschränkungen gibt es da und was muss ich beachten, damit es aich auch auf Linux und Macintosh compilieren lässt.
Ich meine mich zum Beispiel entsinnen zu können, dass "#pragma once" nur auf VC++ funktioniert...


Der Compiler bestimmt die Einschränkungen, der interpretiert den C++-Standard. Ich gehe mal davon aus, dich interessieren eher die Unterschiede zwischen MSVC und GCC.
Lassen wir hierbei mal compiler-spezifische Eigenschaften mal außer acht gibts schon Unterschiede beim Präprozessor, aber das nur am Rande.

Der gcc 4.3 ist sehr strikt. Es überrascht immer, was der MSVC doch alles durchgehen läßt, insbesondere bei Namespaces.
pragma ist meines Wissens outdated.
#pragma once mag ja noch funktionieren, aber wie stehts mit
#pragma(lib, "..." )

Platform-Unterschiede:
Fängt bei EOL an, hört nirgendwo auf.
Deswegen immer Vorsicht bei Groß/Kleinschreibung und bei File-Operationen wie
z.B. Backslashes + Slashes :

C-/C++-Quelltext

1
#include "header\datei.h"


Der Rest zeigt sich dann ...

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

32

26.05.2009, 14:29

Hmm.. tatsache....

wie isn das mit den Includes ? muss ich dann mit
#ifdef abfragen, ob ich jetzt backslashes machen muss oder nicht ?

Wie ist es mit Variablen-größen ?
ist ein "long" immer 4 Byte groß ?
wie ist das mit short, int, long, char , bool (hierfür definiert ja selbst windows sein eigenes "BOOL")
Sind die auf jedem System gleich groß ?

wie ist es mit bit-order ? obwohl das
ja eigentlich erstmal egal ist...

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

33

26.05.2009, 15:18

Hi,

Zitat von »"Databyte"«

Hmm.. tatsache....

wie isn das mit den Includes ? muss ich dann mit
#ifdef abfragen, ob ich jetzt backslashes machen muss oder nicht ?

Wie ist es mit Variablen-größen ?
ist ein "long" immer 4 Byte groß ?
wie ist das mit short, int, long, char , bool (hierfür definiert ja selbst windows sein eigenes "BOOL")
Sind die auf jedem System gleich groß ?

wie ist es mit bit-order ? obwohl das
ja eigentlich erstmal egal ist...

Normale Slahes / funzen auf jeder Platform. Benutz also die.
Ein long ist nicht immer 4 Bytes groß, ein int aber meistens schon. Um sicherzugehen musst du je nach Platform unterscheiden oder auf den neuen C++Std warten.
Die Bitorder kriegt man mit den entsprechenden Funktionen von den Sockets in den Griff, oder setzt einfach auf littleendian, weil das eh alle modernen Systeme benutzen..

Allgemein ist richtige Platform und Compilerunabhängigkeit in C++ sehr sehr schwierig. Man sehe sich allein Header von Libs an, die auf vielen Compilern laufen müssen (zB boost)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

34

26.05.2009, 19:58

Zitat von »"Databyte"«

wie ist das mit short, int, long, char , bool (hierfür definiert ja selbst windows sein eigenes "BOOL").


Windows definiert wohl sein eigenes BOOL weil es in C damals noch keinen entsprechenden Typ gab (gibts erst seit C99...) und weil die WinAPI ja auch mit anderen Sprachen kompatibel sein soll...

Zitat von »"Helmut"«

Ein long ist nicht immer 4 Bytes groß, ein int aber meistens schon. Um sicherzugehen musst du je nach Platform unterscheiden oder auf den neuen C++Std warten.


Auch im neuen Standard ändert sich afaik nix dran dass die Größe der Standardtypen nicht genau festgelegt ist. Das einzige was immer garantiert ist, ist:

sizeof(char) == 1

und

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

35

26.05.2009, 20:55

Ja, aber es gibt neue Typen, die eine definierte Größe haben;)
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

36

26.05.2009, 20:59

achso, du meinst das int32_t zeugs und so!?
sry, da hast du natürlich recht...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

37

29.05.2009, 15:10

Zitat

Auch im neuen Standard ändert sich afaik nix dran dass die Größe der Standardtypen nicht genau festgelegt ist. Das einzige was immer garantiert ist, ist:

sizeof(char) == 1

und

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

Das stimmt auch nicht ganz. Es gibt mindestanforderungen, die für alle Systeme gelten. Nach "Die C++ Programmiersprache" gilt, dass char mindestens 8, short 16 und long 32 Bit hat. ( S.81, 4.6 ).
Sie Stelle im Standard habe ich aber leider noch nicht gefunden, aber anscheinend rührt das noch vom alten C her. ( ISO 9899:2001 § 5.2.4.2.1 )

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

38

29.05.2009, 15:14

Zitat von »"drakon"«

Das stimmt auch nicht ganz. Es gibt mindestanforderungen, die für alle Systeme gelten. Nach "Die C++ Programmiersprache" gilt, dass char mindestens 8, short 16 und long 32 Bit hat.


Ja das stimmt, das ergibt sich aus den mindestens darstellbaren Wertebereichen der Typen. Allerdings steht das in keiner Weise in Konflikt zu meinem obigen Statement betreffend sizeof...

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

39

29.05.2009, 15:17

Zitat

Ja das stimmt, das ergibt sich aus den mindestens darstellbaren Wertebereichen der Typen. Allerdings steht das in keiner Weise in Konflikt zu meinem obigen Statement betreffend sizeof...


Ja, das stimmt schon, aber es gilt noch mehr. Es ist nicht das einzige, was gilt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

40

29.05.2009, 15:23

Zitat

[...]Das einzige was immer garantiert ist, ist: [...]


Betreffend sizeof ist es auch das einzige was garantiert ist. Vergiss nicht dass ein char auch 32 bit haben könnte...

Shame on Me: Es tut mir sehr leid drakon, ich hab anstatt dich zu quoten deinen Beitrag editiert und hab das original verloren (verflixte Mod Rechte...). Ich hoff du kannst ihn wiederherstellen :/

Werbeanzeige