2012-01-04 16 views
40

Czy ktoś może mi wyjaśnić, jaka jest różnica między typem danych _Bool i bool w C? Na przykładRóżnica między typami _Bool i bool w C?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool' również musi być typedef, C nie ma tego typu. –

+0

Analogiczne do _Complex vs complex. –

Odpowiedz

87

Te typy danych zostały dodane w C99. Ponieważ bool nie został zarezerwowany przed C99, używają one słowa kluczowego _Bool (które zostało zarezerwowane).

bool to pseudonim dla _Bool, jeśli podasz stdbool.h. Zasadniczo, w tym nagłówek stdbool.h oznacza, że ​​kod jest prawidłowy, a identyfikator bool jest "zarezerwowany", tzn. Że twój kod nie użyje go do własnych celów (podobnie jak w przypadku identyfikatorów true i false).

+4

+1 za uwzględnienie historii. – Lindydancer

+18

Długoterminowym zamiarem wydaje się być, że standard zostanie ostatecznie zmieniony, aby słowo kluczowe było słowem kluczowym. Jest to krok 1, w którym można użyć , aby uzyskać makro bool, a nadal możesz niezdefiniować lub przedefiniować go dla własnych niegodziwych celów. Krok 2 będzie polegał na odmowie niezdefiniowania lub przedefiniowania bool z , aby zniechęcić takie szantanowanie. Następnie krok 3 polega na uczynieniu boola słowem kluczowym dokładnie jak _Bool i oznaczeniem _Bool przestarzałym. Pod koniec tej długiej drogi (powiedzmy dekadę lub dwie od teraz) standardowy kod C będzie miał typ bool, a nowi programiści nie będą wiedzieć, że kiedykolwiek go brakowało. – tialaramex

+2

Nie rozumiem, dlaczego musi to potrwać dwie dekady, biorąc pod uwagę, że jest to oczywista poprawa. Kod, który nie lubi tej zmiany, może być nadal kompilowany przy użyciu aktualnych wersji kompilatora. –

13

Nie ma różnicy.

bool to makro, które rozwija się do _Bool w stdbool.h.

I true jest makro, które rozszerza się do 1 w stdbool.h

Powiązane problemy