Zanim rozpoczniemy czytankę, chcę powiedzieć o małej zmianie tematów artykułów. Z powodu ponownego wtrącenia się zajęć zdalnych u mnie na uczelni, nie dam rady w chwili obecnej kontynuować materiału o tablicach. Zostały jeszcze dwa wątki, które z przyczyn ode mnie niezależnych (nie wyrobię się po prostu) przesunę na ten weekend. Aby dać sobie nieco odetchnąć, postanowiłem w takim razie rozpocząć kolejny rozdział dotyczący wartości logicznych w języku C. Opowiem Wam jak sobie radzić w niektórych sytuacjach mających związek z wyrażeniami logicznymi jeśli typ "bool" w C nie istnieje! To jest część pierwsza, czyli wyjaśnienie jaką wartością i jakim typem danych charakteryzuje się "prawda" i "fałsz" bez typu logicznego.

BOOL W C NIE ISTNIEJE!

Zaskoczeni? Ci, co przyzwyczaili się do pisania w językach bardziej abstrakcyjnych to z pewnością. Skoro już napisałem takie stwierdzenie uważam, że powinniśmy wyjaśnić tę sprawę w jaki sposób język C może "identyfikować" prawdziwość jakiegoś wyrażenia bez użycia "booleana". No bo w pierwszej chwili to się wydaje absurdalne, bo jak inaczej jesteśmy w stanie rozróżnić zdanie prawdziwe od fałszywego. Tak się składa, że jesteśmy w stanie i zerkając na podstawowe typy danych, odpowiedź macie prawie przed nosem. Zanim wprowadzono standard C99 w 1999 roku gdy nie istniał "bool" w C, programiści stosowali proste "integery"! Za 0 podstawiali "fałsz", za 1 podstawiali "prawdę" i mieli gotowy "boolean"! Pomyślcie sami czy naprawdę trzeba czegoś więcej, żeby niskim kosztem przechować zmienną boolowską.

NAGA PRAWDA CZYM JEST "PRAWDA"

W porządku, wiemy już jak przed 1999 rokiem w języku C stosowało się karykatury logicznego typu danych. Gdy "bool" w C jeszcze nie istniał, w ten sam sposób odbywało się ustalanie wartości dla wyrażeń logicznych. Szczególnie "if'y", które akurat są niezmienne w tym przypadku. Ogólnie rzecz biorąc, w grę również wchodziła liczba całkowita, która stawała się albo zerem (gdy dane wyrażenie jest nieprawdziwe), albo jedynką (gdy dane wyrażenie jest prawdziwe).

Natomiast NIE JEST tak do końca, że tylko jedynka jest prawdą. W elektronice TAK, definiując samodzielnie, też ta sama wieloletnia konwencja wręcz nakazuje robić tak samo. Jednak "bool" w C, a raczej nasz "integer" gdy ma reprezentować "prawdę", wystarczy, że jest różny od zera! Każda inna wartość nawet zmiennoprzecinkowa wprowadzona w środek warunku w instrukcji warunkowej zwróci prawdę, a więc wykona instrukcje umieszczone w bloku. Zatem o wyborze jednej z wielu ścieżek decyduje liczba całkowita!

Skompilujcie sobie poniższy kod źródłowy i zobaczcie sami jak to jest interpretowane:

#include <stdio.h>

#define TRUE "Prawda\n"

int main(void)
{
	if(1)
	{
		printf(TRUE);
	}
	
	if(59)
	{
		printf(TRUE);
	}
	
	if(86.32)
	{
		printf(TRUE);
	}
	
	if(-100.0f)
	{
		printf(TRUE);
	}
	
	if(0)
	{
		printf(TRUE);
	}
	
	getchar();
	
	return 0;
}

To koniec pierwszej części. Drugą część znajdziecie pod tym linkiem.

PODOBNE ARTYKUŁY