Warum wurde der boolesche Datentyp in C nicht implementiert?

7

Einer meiner Freunde hat eine Frage gestellt, warum gibt es in der Programmiersprache C keinen Boolean -Datentyp. Ich habe ein wenig gesucht und gelesen. Ich habe einige Fragen und Antworten im Stapelüberlauf und sage das,

  1. Alle Datentypen sollten adressierbar sein, und ein Bit kann nicht adressiert werden.
  2. Die grundlegende Datenstruktur auf der Hardware-Ebene von Mainstream-CPUs ist ein Byte. Das Arbeiten mit Bits in diesen CPUs erfordert eine zusätzliche Verarbeitung.

Wir können einen bool auf diese Weise benutzen

%Vor%

oder verwenden Sie typedef s.

Aber meine Frage ist: Warum wurde es nicht als Datentyp in C implementiert, selbst nach so vielen Jahren? Es ist nicht sinnvoll, einen Ein-Byte-Datentyp zum Speichern eines booleschen Werts zu implementieren, statt int oder short explizit zu verwenden.

    
Haris 22.09.2014, 12:59
quelle

2 Antworten

15

Das stimmt nicht mehr. Der eingebaute boolesche Typ, aka _Bool , ist seit C99 verfügbar. Wenn Sie stdbool.h einschließen, ist auch dessen Alias bool für Sie da.

_Bool ist ein echter nativer Typ, kein Alias ​​von int . Was die Größe betrifft, gibt der Standard nur an, dass er groß genug ist, um 0 und 1 zu speichern. Aber in der Praxis machen die meisten Compiler ihre Größe 1 :

Dieses Code-Snippet auf ideone gibt beispielsweise 1 :

aus %Vor%     
Yu Hao 22.09.2014, 13:01
quelle
4

C99 hat Unterstützung für den booleschen Typ _Bool hinzugefügt, ist nicht einfach ein typedef und muss nicht die gleiche Größe wie int haben, aus dem Entwurf C99 Standardabschnitt 6.2.5 Typen :

  

Ein als Typ _Bool deklariertes Objekt ist groß genug, um die Werte 0 und 1 zu speichern.

Wir haben Komfortmakros über den Header stdbool.h . Das können wir sehen, wenn wir zum Entwurf des C99-Standardabschnitts gehen 7.16 Boolescher Typ und Werte whcih sagt:

  

Der Header definiert vier Makros.

     

Das Makro

     
    

bool

  
     

wird zu _Bool erweitert.

     

Die restlichen drei Makros sind für die Verwendung in #if-Preprocessing-Direktiven geeignet. Sie   sind

     
    

wahr

  
     

, die auf die Ganzzahlkonstante 1 erweitert wird,

     
    

falsch

  
     

, die auf die Ganzzahlkonstante 0 und

erweitert wird      
    

__ bool_true_false_are_definiert

  
     

, die auf die Ganzzahlkonstante 1 erweitert wird.

    
Shafik Yaghmour 22.09.2014 13:06
quelle

Tags und Links