Witam!
Chciałbym się dowiedzieć czy dobrze rozumiem zasadnicze różnice pomiędzy dyrektywą, a instrukcją if. Napisałem kilka przykładowych pseudokodów, ale oczywiście poza forum testowałem to na prawdziwym kodzie. Po prostu odpiszcie czy wszystko się zgadza
Instrukcja if:
Do wyboru dwu-wariantowego służy instrukcja:
if(warunek)
isntrukcja;
else
Warunek musi być podany w nawiasie Jeśli nawiasy klamrowe nie stanowią inaczej to else odnosi się do najbliższego poprzedzającego go if lub else if Jeżeli warunek przy if będzie spełniony, a if (lub też else if) nie będzie miał nawiasów klamrowych to zostanie wykonana tylko pierwsza instrukcja. Tzn. jeżeli tutaj warunek się nie będzie zgadzał to i tak zostaną wykonane instr. 2 i instr. 3 :
if(10 == 2)
instrukcja_1;
instrukcja_2;
instrukcja_3;
Tak się dzieje tylko wtedy, jeżeli po if nie ma else lub else if. Jako warunek może być podana zamiast stałej dosłownej - zmienna Przy else nie może być warunku - nawet prawdziwego. Tzn. tutaj będzie błąd:
if (false)
cout << "BLAD!";
else (true)
cout << "OK";
--------------------------------------------------------------------------------------------------------------------- Dyrektywa #if: Warunek nie musi być podany w nawiasie ZAWSZE takie dyrektywy muszą mieć zakończenie - #endif Jako warunek zawsze musi wystąpić stała dosłowna (- czyli coś co preprocesor już zna przed kompilacją) W przeciwieństwie do “zwykłego” if , tutaj może być warunek prawdziwy przy #else:
#if 10 == 5
cout << "BLAD!";
#else 10 == 10
cout << "OK";
#endif
Ale to już należy traktować jako bardzo zaawansowaną ciekawostkę…
Zamiast #elif możemy użyć dłuższej formy #else if
#ifdef możemy zastąpić #if defined
Ale już nie możemy np. #ifndef zastąpić #if not defined
Co prawda niektóre zdania są zbyt szczegółowe, ale interesuje mnie czy zawsze tak jest