Z dużym opóźnieniem po zajęciach mogę wreszcie Wam okazać dalszą część tematu rozpoczętego wczoraj. Mówiliśmy o tym, że w języku C nie było możliwości korzystania z logicznego typu danych. Mam dla Was kolejną wiadomość. Od 1999 roku wraz z wprowadzeniem standardu C99, niemożliwe stało się możliwe! "bool" w C zaczął istnieć! Bez żadnych bibliotek, wspomagaczy zewnętrznych czy haczyków! Przejdźmy do szczegółowego omówienia.

BOOL W C W STANDARDZIE C99

Logiczny typ danych w języku C pojawił się w postaci "_Bool" (słówko ze znakiem podkreślenia jako przedrostek). Taka jest oficjalna nazwa i jeśli dziwicie się czemu jest z takim przedrostkiem to odpowiem Wam, że przyczyną było znimalizowanie szans na to, że w projektach wykorzystujących ANSI C jeszcze przed tym standardem wykorzystywane słowo "bool" w postaci zmiennych mogło powodować kolizje w nazewnictwie. Aby nie stwarzać problemu w już napisanych projektach, członkowie organizacji standaryzacyjnej doszli do wniosku, że wymyślenie przez programistę nazwy "_bool" jako obiektu danych jest zdecydowanie mniej prawdopodobne niż samo słowo bez przedrostka. W celu jeszcze większego zredukowania prawdopodobieństwa wystąpienia konfliktu nazw, postanowiono dorzucić dużą literę w słowie "Bool". Tyle tytułem historii, a teraz przejdźmy do przedstawienia działania i panujących zasad.

PRAKTYCZNE ZASTOSOWANIE BOOLEANA

Po podaniu typu "_Bool", nadajemy klasycznie nazwę i przypisujemy...no właśnie, co przypisujemy, jak myślicie? Czy wartość liczbową, czy "true" lub "false"? W czasie wprowadzenia typu "bool" w C, nie był jeszcze takiej postaci do jakiej się przyzwyczailiście. Zatem, zero lub jedynka, to jest dopuszczalny zakres. W przypadku podania innej liczby, zostanie zamieniona automatycznie na jedynkę według postępowania w instrukcjach warunkowych. Przyjrzyjmy się konkretnemu przykładowi bo bez niego to ciężko cokolwiek przekazać:

#include <stdio.h>

int main(void)
{
	_Bool a = 1;
	_Bool b = 56;
	_Bool c = -415.6;
	_Bool d = 0;
	
	if(a)
	{
		printf("Prawda A kryje sie pod liczba %d\n", a);
	}
	
	if(b)
	{
		printf("Prawda B kryje sie pod liczba %d\n", b);
	}
	
	if(c)
	{
		printf("Prawda C kryje sie pod liczba %d\n", c);
	}
	
	if(d)
	{
		printf("Prawda D kryje sie pod liczba %d\n", d);
	}
	
	getchar();
	
	return 0;
}

Po skompilowaniu i uruchomieniu, na jaw wyjdą dwa ciekawe spostrzeżenia. Po pierwsze, możemy przypisać dowolną liczbę różną od zera (nawet zmiennoprzecinkową!) i kompilator nie uzna tego za błąd składniowy i uzna zdanie za prawdziwe. A po drugie, po wczytaniu się w komunikaty, będziemy mogli dostrzec same jedynki w miejsca specyfikatorów formatu funkcji "printf". Oznacza to, że "_Bool" w C dokonuje automatycznej konwersji do liczby jeden bez względu na to, czy podano liczbę 100, 10000.5 czy -2.8. Nie robi to żadnego problemu dla kompilatora (o dziwo w tym języku!).


Krótkie zagadnienie, proste, lekkie i przyjemne. Dziś wieczorem ostatnia część, która będzie w pewnym sensie oferowanym udogodnieniem w kwestii zapisu do którego zdążyliście się przyzwyczaić.

PODOBNE ARTYKUŁY