C'deki boole türü ile ilgili
1999 yılında C dilinde oldukça geç bir boole türü getirildi. O zamandan önce C'nin bir boole türü yoktu, bunun yerine int
tüm boole ifadeleri için kullanılıyordu . Bu nedenle, > == !
vb. Gibi tüm mantıksal işleçler bir int
değer 1
veya döndürür 0
.
Uygulamaların typedef enum { FALSE, TRUE } BOOL;
, aynı zamanda int
boyutlandırılmış türlere de kaybolan gibi ev yapımı türleri kullanması özeldi.
C ++, bool
1 bayttan daha büyük olmayan çok daha iyi ve açık bir boole tipine sahipti. C'deki boole türleri veya ifadeleri en kötü durumda 4 bayt olarak sonuçlanır. C ++ ile bir çeşit uyumluluk C'de C99 standardı ile getirilmiştir. C daha sonra bir boole türü _Bool
ve üstbilgi aldı stdbool.h
.
stdbool.h
C ++ ile bazı uyumluluk sağlar. Bu üstbilgi , büyük olasılıkla 1 bayt büyüklüğünde küçük bir tamsayı türü olan bir türe bool
genişleyen makroyu (C ++ anahtar sözcüğüyle aynı yazım) tanımlar _Bool
. Benzer şekilde, başlık iki makro true
ve false
C ++ anahtar sözcükleriyle aynı yazım denetimi sağlar, ancak eski C programlarıyla geriye dönük uyumluluk sağlar . Bu nedenle true
ve false
genişletmek 1
ve 0
C ve bunların türüdür int
. Bu makrolar aslında karşılık gelen C ++ anahtar kelimeleri gibi boole türü değildir.
Benzer şekilde, geriye dönük uyumluluk amaçları için, C'nin mantıksal operatörleri, günümüzde C'nin bir boole türü olmasına rağmen, hala bir int
güne dönmektedir . C ++ ile çalışırken, mantıksal işleçler a döndürür bool
. Bu durumda, bu tür bir ifade sizeof(a == b)
, bir boyutunu verecek int
C, fakat boyutu bool
C ++.
Koşullu operatör hakkında ?:
Koşullu operatör ?:
, birkaç tuhaflığı olan garip bir operatördür. % 100'e eşdeğer olduğuna inanmak yaygın bir hatadır if() { } else {}
. Pek değil.
1. ve 2. ya da 3. işlenenin değerlendirilmesi arasında bir sıralama noktası vardır. ?:
Sadece 2 ya da 3 işlenen ya değerlendirmek o değerlendirilmez işlenen herhangi yan etkilerini yürütmek olamaz yani operatörü, garanti edilir. Like kodu true? func1() : func2()
yürütülmez func2()
. Çok uzak çok iyi.
Bununla birlikte , 2. ve 3. işlenenlerin, normal aritmetik dönüşümlerle birbirine karşı örtülü olarak tanıtılması ve dengelenmesi gerektiğini belirten özel bir kural vardır . ( Burada açıklanan C'deki örtük tür tanıtım kuralları ). Bu, 2. veya 3. işlenenin daima en az bir int
.
Yani bunun bir önemi yok true
ve C'de bir false
tür oluyor int
çünkü ifade her zaman en azından bir maddenin büyüklüğünü verecekti int
.
İfadeyi yeniden yazsanız bile yine de bir !sizeof(a ? (bool)true : (bool)false)
int
Bunun nedeni, normal aritmetik dönüşümler aracılığıyla örtük tür tanıtımından kaynaklanmaktadır.
sizeof(true)
vesizeof(false)
ayrıca 4: ide.geeksforgeeks.org/O5jvuN