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 inttüm boole ifadeleri için kullanılıyordu . Bu nedenle, > == !vb. Gibi tüm mantıksal işleçler bir intdeğer 1veya döndürür 0.
Uygulamaların typedef enum { FALSE, TRUE } BOOL;, aynı zamanda intboyutlandırılmış türlere de kaybolan gibi ev yapımı türleri kullanması özeldi.
C ++, bool1 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ü _Boolve üstbilgi aldı stdbool.h.
stdbool.hC ++ 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 boolgenişleyen makroyu (C ++ anahtar sözcüğüyle aynı yazım) tanımlar _Bool. Benzer şekilde, başlık iki makro trueve falseC ++ anahtar sözcükleriyle aynı yazım denetimi sağlar, ancak eski C programlarıyla geriye dönük uyumluluk sağlar . Bu nedenle trueve falsegenişletmek 1ve 0C 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 intgü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 intC, fakat boyutu boolC ++.
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 trueve C'de bir falsetü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