Kezdőoldal » Számítástechnika » Programozás » Mit jelent ez a kifejezés c-ben?

Mit jelent ez a kifejezés c-ben?

Figyelt kérdés

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?



#programozás #elégazás
2014. nov. 19. 11:45
 1/8 Tengor ***** válasza:
100%
C-ben a 0 hamisat jelent, minden más igazat. Így itt mindig az első ág fog végre hajtódni.
2014. nov. 19. 11:49
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

Í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.

2014. nov. 19. 13:31
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:

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)?

2014. nov. 19. 14:05
 4/8 anonim ***** válasza:

"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.

2014. nov. 19. 14:08
Hasznos számodra ez a válasz?
 5/8 Tengor ***** válasza:

#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.

2014. nov. 19. 14:21
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
48%

"Inkább mondjam azt hogy


if (szam == 5) vagy if (szam > 0)?"


Inkább használj boolean typedef-et, úgy illendő.

2014. nov. 19. 14:47
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:
100%

> 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.

2014. nov. 19. 15:04
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Ok kösz mindenkinek.
2014. nov. 20. 21:37

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!