Frage von mAin0x, 47

Warum gibt es in C keinen bool?

Ich beziehe mich hier ausschließlich auf die C Standars, nicht auf verwandte oder leicht veraenderte Sprachen.

Nun, Bool ist nun mal der Datentyp, der von allen am einfachsten programmierbar ist!

Ich dachte frueher, das es daran liegt, das C eine der ersten hoeeren Programmiersprachen darstellt aber das hat sich eruebrigt, als ich anfing mich mit fortran zu beschaeftigen...

Antwort
von Graueumel, 2

Der Grund warum es in C keinen Datentypen bool gibt liegt darin begründet, dass C eine sehr hardwarenahe Sprache ist. Die Datentypen wie int haben einen klaren Bezug zu den CPU-Registern und der Art wie die CPU auf den Speicher zugreift. Wenn ich also z.B. einen int als Variable benutze, dann liegt der 1:1 irgendwo in einer Speicherzelle rum, ohne dass da noch wo eine Umsetzung erfolgen müsste (im Gegensatz beispielsweise zu einer Scriptsprache wie Javascript , Python, Perl). Deshalb kann man auch in C mit Zeigern arbeiten, die dann auf genau diejenige Speicherzelle im RAM zeigen, wo man darüber dann direkten Zugriff drauf hat. Bei bool müsste die Speicherzelle dann ein Bit groß sein und das gibt es nicht, denn der Speicher ist immer in Bytes organisiert, also in Einheiten zu je 8 Bits. Es ist aber keine Verschwendung für einen bool ein char (8 Bit) oder int (32 Bit auf einer 32-Bit-CPU) zu benutzen, denn die CPU muss bei einem Vergleich von char oder int nicht das einzelne Bit aus dem int rauskramen, sondern es gibt Prozessorbefehle, die das ganze int auf 0 oder ungleich 0 abfragen. Du kannst also ohne Probleme ein typedef nehmen, das dem Typen bool einen int gleichmacht und 1 oder 0 für true oder false benutzen. Mit einem #define kannst Du Dir auch true oder false bereitstellen, falls Dich die 0/1 in der Leserlichkeit stört. In der STL zu C++ gibt es dann schon einen Datentypen bool, aber wie die interne Implementierung ist und ob der ebenso direkt auf Speicher/Register zugreift wie in C ein int, ist anzunehmen, aber nicht garantiert. Alle Klarheiten beseitigt? Ansonsten nochmal nachfragen.

Antwort
von ceevee, 34

Seit dem C99-Standard gibt es in C bool (über stdbool.h)

https://en.wikipedia.org/wiki/Boolean_data_type#C.2C_C.2B.2B.2C_Objective-C.2C_A...

Und wenn du in älteren Standards programmierst (bei dir ist ja alles möglich ;)), dann kannst du dir den Bool über einen typedef schnell nachrüsten.

Kommentar von mAin0x ,

1. Ja, diese Libary kenne ich auch...   -.-
2. Danke...?

Antwort
von Suboptimierer, 35

bool ist an sich überflüssig und hat nur einen visuellen Schönheitseffekt. Man kann genauso mit 0 und 1 arbeiten oder 0 und nicht 0.

Es ist kein Kennzeichen einer höheren Programmiersprache, bool zu unterstützen. Wichtiger sind die boolschen Operatoren / die boolsche Algebra. Diese werden von C unterstützt.

Kommentar von mAin0x ,

Da haben sie natuerlich recht, es wuerde doch aber auch viel weniger Arbeitsspeicher brauchen oder nicht?

Kommentar von Suboptimierer ,

Kommt darauf an. Wenn es nur ein Overhead auf int oder smallint wäre, würde man keinen Speicher sparen.

Kommentar von ceevee ,

Ein Bool verbraucht in C ein Byte, genauso viel wie ein char.

http://stackoverflow.com/questions/8014161/in-c-how-much-space-does-a-bool-boole...

Ich glaube, das ist programmiersprachenunabhängig im IEEE-Standard so festgelegt... die kleinsten Elemente in C sind ein Byte groß, weil du ein einzelnes Bit nicht eindeutig adressieren kannst.

Man könnte jetzt zwar theoretisch einen eigenen Datentyp definieren, bei dem in einem Char 8 Booleans (für jedes Bit einen) speichern könnte, allerdings steigt damit der Rechenaufwand, während das Ersparnis an Speicher zu vernachlässigen ist, wenn man mal betrachtet, wieviel Speicher heutzutage in Geräten verbaut wird.

Kommentar von Suboptimierer ,

Ja, dann hätte man problemlos den Typ einführen können. 

C-Programmierer waren wahrscheinlich so bequem und tippten lieber ein schnelles =0 als ein längeres, dafür sprechenderes  =false.

Wenn man Speicher- und CPU-Ersparnis betrachtet, so muss man technisch in die Zeit zurück denken, als C entwickelt wurde. Damals war Speicher durchaus noch ein Problem.

Unterscheiden die Programmierer heute eigentlich noch zwischen short int, int und long int oder wird pauschal long int verwendet?

Kommentar von TeeTier ,

Ganz genau! Die einzige Ausnahme wären gepackte Strukturen, aber egal.

Viele syntaktische Elemente sind nur reine Kosmetik um menschlichen Programmierern die Arbeit zu erleichtern. Das "try" in der Ausnahmebehandlung von C++ z. B. ist auch nur an sich sinnloser Schnickschnack und der Compiler interessiert sich nicht dafür. Hauptsache ein Block mit geschweiften Klammern steht vor dem "catch". Allerdings bestehen viele Parser trotzdem darauf.

Aber ich schweife wieder mal ab ... :)

Keine passende Antwort gefunden?

Fragen Sie die Community