Mit jelent ez a kifejezés c-ben?
Pl van egy ilyen elágazás:
int szam = 5;
if(szam)
{.............}
Ha a feltételbe egy változót írok csak így önmagában akkor az mit jelent?
Így van, ahogyan Tengor mondja.
Az általad vázolt helyzetet pedig bad practice-nek hívják és kiváló segédeszköz olvashatatlan kód készítéséhez.
Köszi szépen a válaszokat.
Bad practice? Szóval ezt nem tanácsos így használni?
Inkább mondjam azt hogy
if (szam == 5) vagy if (szam > 0)?
"C-ben a 0 hamisat jelent, minden más igazat."
Helyesbítek: A C-ben minden 0 vagy NULL érték hamisat jelent. Ez a NULL érték a pointereknél jön be.
#4, köszi a pontosítást!
#3, a leírt if-jeid nem egyenértékűek.
Az if(szam) {} akkor is az első ágba fut le, ha a szam az 5, 10, -1, mindig kivéve ha szam 0.
Az if(szam == 5) {} csak akkor, ha a szam az pontosan 5. -1, 1, 0 értékeknél sem fog az első ág lefutni.
Az if(szam > 0) {} pedig csak a 0-nál nagyobb számokra futtatja az első ágat, de pl -1-nél már nem. Van olyan rendszer, ahol a hamis az -1.
if (szam != 0){} az ami ekvivalens az if(szam){} kifejezéssel.
"Inkább mondjam azt hogy
if (szam == 5) vagy if (szam > 0)?"
Inkább használj boolean typedef-et, úgy illendő.
> Helyesbítek: A C-ben minden 0 vagy NULL érték hamisat jelent. Ez a NULL érték a pointereknél jön be.
Így van! Én annyit tennék hozzá, hogy a NULL nem más mint egy
#define NULL 0
vagy
#define NULL ((void*) 0)
Illetve, hogy gyakorlatilag minden egész szám egyben logikai változó, és minden ami implicit kasztolható egész számra értelmen szerűen szintén az.
> bad practice-nek hívják és kiváló segédeszköz olvashatatlan kód készítéséhez.
Egyetértek.
Bár a példából egyértelműen következik, hogy a "szam" változó, egy szám, így egy C-ben jártas ember el tudja olvasni. Ettől függetlenül tényleg megtévesztő ebben a formában az if szerkezet. Továbbá biztonságosabb a kód, ha "szam > 0" szerepel a feltételben, hiszen kivédi a túlcsordulást. Ez nevezzük "defensive coding"-nak.
Érdekességképen nagyon sok API forráskódjában lehet találkozni a fordított jelöléssel:
if (5 == szam)
Ez két okból előnyösebb:
1. ha valaki elgépeli és "=" ír "==" helyett. Ebben az esetben ugyanis az értékadás igazzal tár vissza minden esetben.
2. (C++ vonatkozás) A szam lehet egy objektum is, ahol a == operátor túl lehet terhelve.
OFF: C++ oldalról továbbá
A C++11 óta létezik a nullptr kulcsszó ami mindig típusbiztos null pointert jelent.
Továbbá C++-ban túl lehet terhelni a bool operátort.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!