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#.

Zobacz też

* [[C/True]] * [[C/False]]

5 komentarzy

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