2012-01-04 20 views
40

Kimse C'deki _Bool ve bool veri tipi arasındaki farkın ne olduğunu açıklayabilir mi? Örneğin,C içinde _Bool ve bool türleri arasındaki fark?

_Bool x = 1; 
    bool y = true; 

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

'bool' da bir typedef olmalı, C bu türde değil. –

+0

Kompleks'e _Complex benzer. Geçmişi eklemek için –

cevap

87

Bu veri türleri C99 ilave edilmiş içinde 1 için genişleyen bir makro. bool C99'dan önce rezerve edilmediğinden, _Bool anahtar sözcüğünü kullanırlar (ayrılmış). stdbool.h varsa _Bool için bir diğer addır. stdbool.hstdbool.hstdbool.hstdbool.hstdbool.h. Temel olarak, stdbool.h başlığı da dahil olmak üzere, kodunuzun "rezerve edilmiş" kimliğiyle bool kimliğinin geçerli olduğunu, yani kodunuzun kendi amaçları için kullanamayacağının bir belirtisidir (true ve false tanımlayıcıları için benzer şekilde).

+4

+1. – Lindydancer

+18

Uzun vadeli niyet, standardın sonunda bir anahtar kelimeyi bool yapmak için gözden geçirilmiş gibi görünüyor. Bu, bool makrosunu almak için 'u kullanabileceğiniz ve kendi hain amaçlarınız için undefine veya yeniden tanımlamanıza izin verdiğiniz 1. adımdır. Aşama 2, bu gibi kurnazlıklardan vazgeçirmek için bool'ün tanımını ya da 'dan tekrar tanımlamayı reddetmek olacaktır. Daha sonra 3. adım, bir anahtar kelimeyi _Bool gibi bir şekilde bool yapmak ve _Bool'ü onaylanmadı olarak işaretlemektir. Bu uzun yolun sonunda (diyelim ki, on yıl sonra) standart C kodu bir boole tipine sahip olacak ve yeni programcılar bunu hiç bilmiyordu. – tialaramex

+2

Bunun neden 20 yıl sürmesi gerektiğini anlamıyorum, çünkü bu oldukça belirgin bir gelişme. Bu değişikliği sevmeyen kod, halen geçerli derleyici sürümleri kullanılarak derlenebilir. –

13

Fark yoktur.

bool,stdbool.h'a genişleyen bir makrodur.

ve truestdbool.h

İlgili konular