Bool
tharos
Bool jest typem logicznym. Przyjmuje wartość True lub False. Wartości typu bool możemy używać np. w sterownikach pętli, różnego rodzaju przełącznikach, itp.
Przykłady
bool wlacznik1 = true;
bool wlacznik2 = false;
if(wlacznik1 == true)
{
// instrukcje
}
if(wlacznik2 == false)
{
// instrukcje
}
Informowanie o poprawnym wykonaniu funkcji:
bool funkcja()
{
// wykonaj działanie
// ...
return true; // funkcja została wykonana prawidłowo
}
int main(){
if(funkcja() == true) // inaczej: if(funkcja())
{
// poprawne wykonanie
}
else
{
// błędne wykonanie funkcji
}
}
Aby sprawdzić, czy dana zmienna równa się true bądź false, można napisać po prostu:
if( funkcja() ) // == true
if( !funkcja() ) // == false
Definicja typu bool dla języka ANSI C
Ponieważ w czystym języku C nie istnieje [[C/Typy_danych|typ danych]] bool, zazwyczaj trzeba do tego celu użyć zmiennej całkowitej (1 - true, 0 - false). Można jednak, za pomocą [[C/Typedef|typedef]], stworzyć własną, skróconą definicję typu enum:#include <stdio.h>
#include <ctype.h>
typedef enum {TRUE = 1, FALSE = 0} bool;
int main()
{
char c;
bool dig;
printf("Podaj jakis znak z klawiatury, a powiem, czy zostala podana cyfra\n");
scanf("%c", &c);
dig = isdigit(c) == 0 ? FALSE : TRUE;
if ( dig == TRUE )
printf("Podana zostala cyfra\n");
else
printf("Podany zostal znak niebedacy cyfra\n");
}
Standard wymaga, by nazwy stałych w języku C/C++ pisane były wielkimi literami, stąd FALSE oraz TRUE. Mimo to, nie będzie dużym błędem, jeśli ktoś użyje małych liter, tak jak to ma miejsce w C++ i C#.
Ale BOOL z WinAPI jest intem.
warto także wspomnieć, że BOOL zdefiniowany w plikach WinAPI także zajmuje 4bajty na win32
Bo adresy w pamięci są grupowane po jednym bajcie, a nie bicie. Więc komputer nie umiałby znaleźć w pamięci 6 bitu w 54829 bajcie.
Mądrzejsze pytanie:
Dlaczego tablica bool a[8] zajmuje 8 bajtów, a nie 1. No cóż - to jedna z nielicznych wad C++
Ja mam pytanie:
Czemu zmienna typu bool zajmuje w pamięci AŻ 1B skoro na chłopski rozum wystarczyłby na to 1b ?
:)
To nie do końca jest tak... Wg. standardu konwersja: bool -> int daje:
false = 0
true = 1
Odwrotna konwersja, np. float -> bool:
0 = false
!=0 = true