2016-11-07 15 views
5

Mam podstawowe pytanie, które bardzo mnie dręczy i nie jestem w stanie zrozumieć, dlaczego programista go używa.Dlaczego warto używać, jeśli warunek (0 == Indx) zamiast (Indx == 0) - czy istnieje różnica?

if (0 == Indx) 
{ 
    //do something 
} 

Co robi powyższy kod i czym różni się od poniższego.

if (Indx == 0) 
{ 
    // do something 
} 

Próbuję zrozumieć kod źródłowy napisany dla systemów wbudowanych.

+2

http://c-faq.com/style/revtest.html –

+1

To [notacja Yoda] (https://en.m.wikipedia.org/wiki/Yoda_conditions) – nakano531

+3

To się nazywa warunek Yoda. Przypisywanie warunków w latach 80-tych było użyteczne, ponieważ kompilatory nie dawałyby ci ostrzeżenia, gdybyś przypadkiem napisał "if (Indx = 0)". W dzisiejszych czasach każdy przyzwoity kompilator da ci ostrzeżenie, więc warianty Yoda wypadły z mody. Oczywiście, jak zawsze, stare idee nigdy nie umierają, tylko ich zwolennicy. – user3386109

Odpowiedz

8

Niektórzy programiści wolą używać to:

if (0 == Indx) 

ponieważ ta linia

if (Indx == 0) 

mogą "łatwo" jest kodowana przez pomyłkę jak instrukcji przypisania (zamiast porównania)

if (Indx = 0) //assignment, not comparison. 

I jest całkowicie poprawne w C.

Indx = 0 to wyrażenie zwracające 0 (które również przypisuje 0 do indeksu).

Jak wspomniano w komentarzach do tej odpowiedzi, większość współczesnych kompilatorów wyświetli ostrzeżenia, jeśli masz zadanie takie jak wewnątrz.

Możesz przeczytać więcej o zaletach i wadach here.

+2

To jest jedna z tych rzeczy, które po prostu nie umarłyby. Nowoczesne kompilatory ostrzegają o tym. Skorzystaj z tego. – Arkadiy

+0

@Arkadiy Nigdy nie wyraziłem swojej osobistej opinii na ten temat, mogę się z tobą zgodzić lub nie. Próbuję tylko odpowiedzieć na pytanie: "Nie jestem w stanie zrozumieć, dlaczego programista go używa?" –

+0

Nigdy nie powiedziałem nic o Twojej osobistej opinii :). Czy mógłbyś także wspomnieć o bardziej nowoczesnym podejściu? – Arkadiy