std::string plattformunabhängig?
-
Bulli schrieb:
...auch
charist plattformneutral. Das sieht man doch schon daran, das sich die ISO-Specifikation um eine genaue Defintion "drückt".
Weshalb char alles mögliche sein kann, und eben nicht plattformneutral ist. char definiert sich über den "Basic Character Set", und der ist "implementation defined".
Es hängt aber, wie bereits gesagt, davon ab, was hier mit "plattformunabhängig" gemeint ist.
-
Ich weiß ja nicht, ob das überhaupt so sinnvoll ist. Ich meine, Leute die für irgendwelche abstrusen anderen Plattformen programmieren, wissen doch oftmals, was sie tun und worauf sie zu achten haben. Leute die kaum Ahnung haben (*vollerschamaufdenbodenschau*) arbeiten meist auf den verbreiteten Plattformen, auf denen man wieder davon ausgehen kann, dass das alles irgendwie gleich implementiert ist und bekommen aber keine klare Ansage. Am Ende typedef't sich dann wieder jedes größere Projekt seine eigenen Typen.
-
Decimad schrieb:
Ich weiß ja nicht, ob das überhaupt so sinnvoll ist. Ich meine, Leute die für irgendwelche abstrusen anderen Plattformen programmieren, wissen doch oftmals, was sie tun und worauf sie zu achten haben. Leute die kaum Ahnung haben (*vollerschamaufdenbodenschau*) arbeiten meist auf den verbreiteten Plattformen, auf denen man wieder davon ausgehen kann, dass das alles irgendwie gleich implementiert ist und bekommen aber keine klare Ansage. Am Ende typedef't sich dann wieder jedes größere Projekt seine eigenen Typen.
Grundsätzlich ist es völlig Wumpe, wie ein Typ intern behandelt wird. Wir haben hier DSP's (Digitale Signal Prozessoren), bei dem die kleinste adressierbare Einheit 32 Bit ist. Da ist sizeof(char) (ist laut Standard immer 1) == sizeof(int).
Obwohl dem so ist, verhalten sich standardkonforme Programme sowohl auf einem Windows-PC als auch auf dem DSP grundsätzlich erstmal gleich.
Problematisch wird es erst, wenn man Daten vom DSP zum Windows-Rechner schieben will (oder umgekehrt). Für solche Probleme gibt es z.B. IDL, welches für austauschbare Typen sorgt.
-
Ja hrmm, da gebe ich dir natürlich recht. Spätestens beim Serialisieren muss man sich dann aber Gedanken drüber machen (oder man nimmt eine xml-Bibliothek her). Aber bei dem ganzen Wust von utf-8, utf-16, multi-byte-chars, chars, wchars, kombination mit std::string wird es dann für mich doch unübersichtlich. Und solche benutzt man doch fast immer um aus String-Tables entsprechende Nachrichten für den Benutzer zu präsenteren. Vielleicht ist das aber auch nur eine Tücke der MSDN, aus der ich da oft versuche, die nötigen Informationen zu quetschen.)
-
Decimad schrieb:
...Spätestens beim Serialisieren muss man sich dann aber Gedanken drüber machen ...
Auch nichtmal unbedingt - es spricht nichts dagegen, zu serialisieren, ohne die jeweilige Plattform zu kennen. Erst, wenn man auf ein bestimmtes plattformspezifisches Protokoll hinaus will (bestimmte Anzahl an Bytes, ein bestimmter Zeichensatz, ...), wird's eben plattformspezifisch.
Tachyon schrieb:
...Problematisch wird es erst, wenn man Daten vom DSP zum Windows-Rechner schieben will (oder umgekehrt). ...
Oder anders ausgedrückt: Problematisch wird's erst dann, wenn man plattformspezifische Aufgaben erledigen bzw. plattformspezifische Aussagen treffen will.... leider zählt hierbei zur "Plattform" auch der konkrete Compiler.
Das ist für mich das größte Manko am C++-Standard: Der fehlende "Kompatibilitätsmodus" (auch wenn ich selbst nicht wüsste, wie man den sinnvoll definieren könnte), der wenigstens die Compiler/Linker untereinander kompatibel macht.Gruß,
Simon2.
-
Weshalb char alles mögliche sein kann, und eben nicht plattformneutral ist. char definiert sich über den "Basic Character Set", und der ist "implementation defined".
ist doch vollkommen irrelevant was der char nun byte und groessentechnisch ist ...
solange das System / die Api, die ebenfalls plattformunabhaengig ist, dazu passend das ding verarbeiten kann.Es gibt sogar ne ganze menge structs in lowlevel funktionen, die sind plattformunabhaengig, obwohl man sie sich auf jeder plattform anders definieren. Solange man ned selber den inhalt auswertet sondern die mitgeleiferten funktionen verwendet.
Wuerde das ned funktionieren, wuerde man fast gar keine plattformunabhaengigkeit haben oder ???mann sollt plattformunabhaengig ned mit binaercompatibel verwechseln ....
Ciao ...
-
@RHBaum und andere die meinen das sei alles so einfach,
es gibt auch Programme die mehr tun als nur Texte rumzuschieben. z.B. irgendwas zu rechnen.
Oder irgendwelchen Protokolle zu implementieren.Da ist es dann schnell sehr wichtig wie gross char ist, oder wie gross int ist etc.
-
hustbaer schrieb:
@RHBaum und andere die meinen das sei alles so einfach,
es gibt auch Programme die mehr tun als nur Texte rumzuschieben. z.B. irgendwas zu rechnen.
Oder irgendwelchen Protokolle zu implementieren.Da ist es dann schnell sehr wichtig wie gross char ist, oder wie gross int ist etc.
Wer aber sowas implementiert, wird auch soviel Knowhow haben, einen bestimmten Datentyp zu wählen, notfalls per
typedef.
-
Bulli schrieb:
hustbaer schrieb:
@RHBaum und andere die meinen das sei alles so einfach,
es gibt auch Programme die mehr tun als nur Texte rumzuschieben. z.B. irgendwas zu rechnen.
Oder irgendwelchen Protokolle zu implementieren.Da ist es dann schnell sehr wichtig wie gross char ist, oder wie gross int ist etc.
Wer aber sowas implementiert, wird auch soviel Knowhow haben, einen bestimmten Datentyp zu wählen, notfalls per
typedef.Nur leider gibt es auch noch was anderes, als Hobyentwickler, die alles selber bauen. Wenn man an Softeareteilen in größeren Teams mit vllt. 10 Leuten arbeitet, und das ganze dann noch von anderen Teams benutzt werden soll, und das ganze dann vllt. noch zwischen verschiedenen Plattformen hin und her geschoben werden muss, dann reicht etwas Know-How nicht mehr aus. Dann muss man sich schon sehr genau Gedanken bei der Spezifikation der Schnittstellen machen, oder Frameworks benutzen, die einem die Definition von Interplattform-Schnittstellen erlauben, wie z.B. IDL+CORBA.
-
Und?

-
Bulli schrieb:
hustbaer schrieb:
@RHBaum und andere die meinen das sei alles so einfach,
es gibt auch Programme die mehr tun als nur Texte rumzuschieben. z.B. irgendwas zu rechnen.
Oder irgendwelchen Protokolle zu implementieren.Da ist es dann schnell sehr wichtig wie gross char ist, oder wie gross int ist etc.
Wer aber sowas implementiert, wird auch soviel Knowhow haben, einen bestimmten Datentyp zu wählen, notfalls per
typedef.Die Frage war "plattformabhängig oder nicht?".
Deine Antwort "wer Know-How hat bekommt es schon hin die plattformabhängigen Sachen so machen dass sie überall funktionieren" (sinngemäss).
Ich hoffe dir ist klar dass das ein Argument für "plattformabhängig" ist.Merke: portierbar != plattformunabhängig
(So wie: kann-ich-lösen != Problem-nicht-vorhanden)Es ist ja OK dass C und C++ Datentypen verwenden die nicht genau definiert sind. Man kann auch damit umgehen, wenn man ein wenig (sprich: verdammt gut) aufpasst, klar. Nur bringt es denke ich nix zu behaupten es wäre nicht so, bzw. es würde keine (relevanten!) Unterschiede geben, je nachdem mit welcher Plattform man arbeitet.
-
In der heilen abgeschotteten Kommandobox-Welt funktioniert das doch toll, oder wenn man nur Bibliotheken einsetzt, die sich für einen darum kümmern
