Jason. Cała informatyka w jednym miejscu!

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! Wartość logiczna w języku C zaczęła istnieć tylko jako..."Bool"! Bez żadnych bibliotek, wspomagaczy zewnętrznych czy haczyków! Przejdźmy do szczegółowego omówienia.

WARTOŚĆ LOGICZNA W STANDARDZIE C99 JAKO "BOOL"!

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 zminimalizowanie szans na to, że w projektach wykorzystujących ANSI C jeszcze przed tym standardem, wykorzystywane słowo "bool" w postaci zmiennych mogłoby powodować kolizje w nazewnictwieAby 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ć wielką literę w słowie "Bool". Tak wyszło "_Bool". Tyle tytułem historii, a teraz przejdźmy do przedstawienia działania i panujących zasad.

PRZYKŁAD KODU ŹRÓDŁOWEGO

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 języku 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ć :D:

#include <stdio.h>

int main(void)
{
	_Bool a = 1;
	_Bool b = 56;
	_Bool c = -415.6;
	_Bool d = 0;
	
	if(a)
	{
		printf("Prawda w przypadku 1 kryje sie pod liczba %d\n", a);
	}
	
	if(b)
	{
		printf("Prawda w przypadku 2 kryje sie pod liczba %d\n", b);
	}
	
	if(c)
	{
		printf("Prawda w przypadku 3 kryje sie pod liczba %d\n", c);
	}
	
	if(d)
	{
		printf("Prawda w przypadku 4 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. Co więcej, 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 języku 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. Tutaj jest ostatnia część, która będzie w pewnym sensie oferowanym udogodnieniem w kwestii zapisu, do którego zdążyliście się przyzwyczaić :D.

PODOBNE ARTYKUŁY