2014-09-22 11 views
7

Uno dei miei amici ha fatto una domanda, perché non c'è il tipo di dati Boolean nel linguaggio di programmazione C. Ho fatto un po 'di ricerca e di lettura. Ho avuto alcune domande e risposte in overflow dello stack dicendo che,Perché il tipo di dati booleani non è stato implementato in C

  1. Tutti i tipi di dati dovrebbero essere indirizzabile, e un po 'non può essere affrontata.
  2. La struttura di base dei dati a livello di hardware delle CPU mainstream è un byte. Il funzionamento su bit in queste CPU richiede un'ulteriore elaborazione.

possiamo usare una bool in questo modo

#define bool int 
#define TRUE 1 
#define FALSE 0 

o utilizzare typedef s.

Ma la mia domanda è questa: perché non è stata implementata come un tipo di dati in C, anche dopo così tanti anni. non ha senso implementare un tipo di dati di un byte per memorizzare un valore booleano invece di utilizzare int o short in modo esplicito.

+7

È lì. Cercare '' –

+0

Correlato: http://stackoverflow.com/questions/1608318/is-bool-a-native-c-type/1608350#1608350 –

+0

ho guardato dentro '' ma questo utilizza numero intero come tipo di ritorno . perché intero, non 4 byte sono ridondanti (considerando sizeof (int) = 4), se possiamo farlo usando solo 1 byte – Haris

risposta

15

Questo non è più vero. Il tipo booleano incorporato, alias _Bool è disponibile dal C99. Se includi stdbool.h, il suo alias bool è anche lì per te.


_Bool è un vero e proprio tipo nativo, non un alias di int. Per quanto riguarda le dimensioni, lo standard specifica solo che è abbastanza grande da contenere 0 e 1. Ma in pratica, la maggior parte dei compilatori fanno fare la sua dimensione 1:

Ad esempio, questo code snippet on ideone uscite 1:

#include <stdio.h> 
#include <stdbool.h> 
int main(void) { 
    bool b = true; 
    printf("size of b: %zu\n", sizeof(b)); 
    return 0; 
} 
+0

ho capito. ma ancora una volta la cosa che mi viene in mente è perché restituirà l'intero. il tipo di dati _Bool avrebbe potuto avere il proprio tipo nativo che occuperebbe solo 1 byte. – Haris

+0

@ralph Questo non è vero, vedi la modifica. –

+0

thanx .. ho capito subito .. :) – Haris

4

C99 aggiunto il supporto per il tipo booleano _Bool, non è semplicemente un typedef e non deve essere la stessa dimensione come int, dal progetto di sezione standard C99 6.2.5Tipi:

Un oggetto dichiarato di tipo _Bool è abbastanza grande per memorizzare i valori 0 e 1.

Abbiamo macro convenienza attraverso l'intestazione stdbool.h. possiamo vedere questo di andare al progetto di sezione standard C99 7.16tipo booleano e valori Pagherei dice:

L'intestazione definisce quattro macro.

La macro

bool

espande a _Bool.

Le restanti tre macro sono adatte per l'uso nelle direttive di preelaborazione #if.Essi sono

vero

che si espande al numero intero costante 1,

falsa

che si espande al numero intero costante 0, e

__bool_true_false_are_defined

che si espande al numero intero costante 1.

+0

i prendi questo. ma ancora una volta la cosa che mi viene in mente è perché restituirà l'intero. il tipo di dati _Bool avrebbe potuto avere il proprio tipo nativo che occuperebbe solo 1 byte. – Haris

Problemi correlati