Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Das ist kein Bug Kategorie: Programmierung (von Dietmar Weickert - 22.03.2004 13:51)
Als Antwort auf Re: Das ist kein Bug von Olaf - 21.03.2004 9:50
Ich nutze:
C-Control II Station, OSOPT V3.0
Hallo Olaf!

> da C2 ja eine getypte Sprache ist könnte der Compiler auch mal auf die linke Seite schauen,
> wie es "richtige" Programmiersprachen, wie z.B. Java tun. ...

Deine Einteilung in richtige und falsche Programmiersprachen läuft hier ziemlich ins Leere. Auch dass
du C und Java diesbezüglich vergleichst, lässt auch auf wenig Kenntnis bei Programmiersprachen und
Compilern schlieÃ?en.

C wurde entwickelt, um den verschiedensten Assembler-Sprachen eine strukturierte und
standardisierte Programmiersprache gegenüber zu stellen. Aus diesem Grund ist C immer
maschinennah
und hängt im Verhalten von der Wortbreite des Prozessors ab. Entsprechend
verhalten sich C-Programme unterschiedlich, je nachdem, ob sie auf 16-, 32- oder 64-Bit-Prozessoren
(um nur die gängigsten heraus zu greifen) laufen. Dies trifft ganz besonders auf Schiebe-Operatoren
zu, und der hat in C (Operator << bzw. >>) den Typ des linken Operanden, unabhängig vom rechten.
Wenn ich mich auf einem 16-Bit-Prozessor befinde, und ich programmiere die Expression 1<<25,
dann erhalte ich - ja nach Prozessor - 0 oder (-1). Will ich als Ergebnistyp long erzwingen, benötige
ich entweder eine die cast ((long int) 1)<<25 oder eine long-Konstante: 1L<<25.

Java wurde entwickelt, um - auf den Konzepten von C++ aufbauend - eine Programmiersprache zu
definieren, deren Programme sich auf allen Plattformen immer gleich verhalten. Deshalb laufen
Java-Programme auch nie direkt auf einem Prozessor sondern in einer virtuellen 32-Bit-Maschine, die
die Umsetzung für den jeweiligen Prozessor vornimmt. Hier gibt es auch den einzigen Konnex zur
VMC der C-Control II, nur handelt es sich bei der VMC eben um eine virtuelle 16-Bit-Maschine.

Abgesehen davon ist mir kein einziger Compiler bekannt, der sich bei der Auswertung von Operanden
danach richtet, welchen Typ die Variable hat, die das Ergebnis des gesamten Ausdruckes erhält. Alle
Compiler werten zuerst den Ausdruck aus, und erst im Zuge der Zuweisung kommen - falls notwendig -
neurliche Typ-Umwandlungen zum tragen, um die Typen von Variable und Ausdruck mit einander
kompatibel zu machen.

Man kann also wirklich nur zusammen fassen, dass die VMC korrekt und den Spezifikationen
entsprechend arbeitet. Alle anderen Ergebnisse wären bei einer 16-Bit-VM sogar als Bug zu
interpretieren.

Beste Grü�e,
Dietmar.


    Antwort schreiben


Antworten: