2 Stimmen

Kurze int-Werte in C

Warum gibt es keine kurzint-Literale in 'C'?

6voto

Richard Pennington Punkte 19289

Es macht keinen Sinn, eine kurze int-Literale in C zu haben, da alle ganzzahligen Ausdrücke so ausgewertet werden, als ob die Teilausdrücke mindestens int Größe hätten.

5voto

Carl Smotricz Punkte 64366

Alternativ: Weil sie nicht benötigt werden!

Die verschiedenen Datentypen werden in verschiedenen Größen benötigt, um gut zu der zugrunde liegenden Hardware zu passen und/oder um Speicherplatz zu sparen, aber Literale sind ein Kompilierzeit-Konstrukt, das sowieso in geeignete Datenstrukturen gespeichert wird.

Bei float und double ist es anders, weil die gleiche Zahl tatsächlich eine unterschiedliche interne Darstellung in diesen hat - mehr unterschiedlich, jedenfalls mehr als nur ein paar führende Nullen.

Ebenso gibt es einen Unterschied zwischen char und short, auch wenn sie möglicherweise in den gleichen Bits gespeichert werden: Wenn der Programmierer über Zeichendaten spricht, wird es für ihn normalerweise bequemer sein, beispielsweise 'A' als 65 anzugeben.

Aber ein kurzes 99 und ein int 99 sehen für den Programmierer gleich aus, werden im Programm gleich behandelt... der weiterreichende Typ wird problemlos die Arbeit von beiden erledigen.

1voto

Prof. Falken Punkte 23108

Wenn wir über das ursprüngliche Sprachdesign sprechen, denken Sie daran, dass C die meiste seiner aktuellen Form auf der PDP-11-CPU erhalten hat, die 16 Bit beträgt. Es gab also Ganzzahlen für die Arithmetik und Zeichen für die Zeichenspeicherung. Zeiger waren im Grunde genommen das gleiche wie Ganzzahlen.

Die Sprache war sehr pragmatisch und erhielt erst später eine formalere und komplexere Syntax. Also lautet die Antwort, es ist einfach so passiert. Viel später haben wir 32-Bit- und 64-Bit-CPUs erhalten und die Notwendigkeit, zwischen Ganzzahlen unterschiedlicher Längen zu unterscheiden.

Bis zum heutigen Tag programmiere ich fast alle meine C-Programme so, als gäbe es keinen anderen Typ als char und Ganzzahl. Ach übrigens, "char" in C kann sowohl vorzeichenbehaftet als auch vorzeichenlos sein nach dem Standard. Das spiegelt wider, dass Zeichen für die Zeichenspeicherung (Strings) und Ganzzahlen für die Arithmetik gedacht waren.

Zur Klarstellung (danke semaj): Der Compiler kann sich entscheiden, eine als "char" deklarierte Variable als "unsigned char" zu behandeln. Dies geschieht nicht bei einem "int". Ein "int" ist immer vorzeichenbehaftet, aber bei chars können Sie sich nicht sicher sein. Sie müssen davon ausgehen, dass ein char entweder vorzeichenbehaftete oder vorzeichenlose Arithmetik haben kann. Dies ist eine Geschwindigkeitsoptimierung, um CPUs zu berücksichtigen, die schneller mit einer der Implementierungen arbeiten. Der Fokus liegt also auf chars als Speichercontainer, nicht als Arithmetiktyp. (Auch der Name ist ein Hinweis. Es hätte "short" oder "small" genannt werden können, aber aus einem bestimmten Grund wurde es "char" genannt.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X