2010-01-28 47 views
6

Co to jest == i czym różni się od =?Co to jest "==" w C?

Skąd wiadomo, którego użyć?

+4

Komentarze usunięte, ponieważ odwróciły uwagę od odpowiedzi. SO ma jasną politykę "Żadne pytanie nie jest zbyt trywialne lub" nowicjusz "." Określone w FAQ (http://stackoverflow.com/faq). Jeśli chcesz omówić tę politykę, proszę ją wziąć na http://meta.stackoverflow.com/ –

Odpowiedz

20

== to test na równość. = to zadanie.

Każda dobra książka C powinna to pokryć (dość wcześnie w książce, którą wyobrażam sobie).

Na przykład:

int i = 3;      // sets i to 3. 
if (i == 3) printf("i is 3\n"); // prints it. 

Tylko uważaj na haniebne:

if (i = 4) { } 

który jest ważny C i często łapie ludzi. To faktycznie przypisuje 4 do zmiennej i i wykorzystuje ją jako wartość prawdy w instrukcji if. Prowadzi to wiele osób do korzystania z brzydsze ale bezpieczniej:

if (4 == i) {} 

które jeśli przypadkowo użyć = zamiast == jest błąd kompilacji zamiast czegoś, ugryzie cię w tyłek podczas gdy program jest uruchomiony :-)

Operator logiczny - lub dwa pionowe znaki kreskowe, jeden po drugim, , a nie pojedynczy znak. Tutaj jest wyrównana z logicznym-a, a zmienna nazywa b4:

|| 
&& 
b4 

tam żadnej magii.

+6

Proste, jasne, bez protekcjonalności. +1. –

+0

http://www.cppreference.com/wiki/operator_precedence, http://www.cplusplus.com/doc/tutorial/. Sprawdź na tych stronach, które były prawdziwą pomocą, gdy uczyłem się C++. –

5

testy == równość = przypisuje wartość

nie są związane ||

11

a == b jest Test jeśli i b są równe.

a = b nazywa zadanie , co oznacza, że ​​aby zmiennej się o taką samą wartość jak b.

(wpisać | z Shift- \ w układ klawiatury US).

3

dodam, że w fińskich i szwedzkich klawiatur. Symbol rury; |; OR to AltGr (prawy alt) i <. JEŻELI natomiast używasz Maca, to jest to klawisz Alt-7.

Dużo się pociłem, gdy po raz pierwszy zacząłem pisać na tych klawiaturach.

2

Teraz, gdy znasz już różnicę między "==" i "=", pozwól, że powiem ci kilka słów ostrożności, chociaż "==" jest używane jako standardowy test równości między porównywalnymi zmiennymi a "=" używanym jako przypisanie odlewane wewnętrznie, następujący błąd programowania jest cichy wspólny.

W poniższym przykładzie i podobnych kodach, "=" jest znane jako "Zawsze prawdziwe" operator warunkowy.

#include<stdio.h> 
int main() 
{ 
    int i = 10, j = 20; 
    if (i = j) 
     printf("Equal\n"); 
    else 
     printf("NOT Equal\n"); 
    return 0; 
} 

Tak więc uwaga jest „Nigdy nie używaj«=»w if sprawozdania, chyba że masz coś źle w głowie.”

+3

Co? Nie ma nic bardziej eleganckiego niż: if (fh = fopen ("file.txt", "r") {process_file (fh); close (fh);} // :-) – paxdiablo

+0

Nazwałbym go również "zawsze prawdziwy i trąbi mnie jako "warunkowego operatora". Ale dobra rada, więc +1. – paxdiablo

+0

@paxdiablo: masz rację ... ale chciałem zachować ostrożność tylko dla początkujących. Jednak w głupich kodach, jeśli chcę mieć duplikat deskryptora pliku jako "fh", mogłoby to prowadzić do błędów: if (fd = fh = fopen ("file.txt", "r") {// jakiś kod}; –