Yhtäsuuruutta verrataan == operaattorilla, EI sijoituksella =. Tämä on eräs tavallisimpia aloittelevan (ja kokeneenkin) C- ohjelmoijan virheitä:
/* Seuraava tulostaa vain jos a == 5 */ if ( a == 5 ) printf("a on viisi!\n"); /* Seuraava sijoittaa aina a = 5 ja tulostaa AINA! */ :-( if ( a = 5 ) printf("a:ksi tulee AINA 5!\n");
Sijoitus a=5 on myös lauseke, joka palauttaa arvon 5. Siis sijoitus kelpaa tästä syystä vallan hyvin loogiseksi lausekkeeksi. Onneksi useat C- kääntäjät osaavat varoittaa tästä katalasta virhemahdollisuudesta.
Joskus ominaisuutta voidaan tarkoituksella käyttää hyväksikin. Esimerkiksi halutaan sijoittaa AINA a=b ja sitten suorittaa jokin lause, mikäli b!=0. Tämä voitaisiin kirjoittaa useilla eri tavoilla:
/*1*/ a = b; if ( b ) printf("b ei ole nolla!\n"); /*2*/ a = b; if ( b != 0 ) printf("b ei ole nolla!\n"); /*3*/ if ( a = b ) printf("b ei ole nolla!\n"); /*4*/ if ( (a=b) != 0 ) printf("b ei ole nolla!\n");
Edellisistä tapa 3 on C- mäisin, mutta kääntäjä saattaa varoittaa siitä (ja tämä varoitus kannattaa ottaa todesta). Jotta C- mäinen tapa voitaisiin säilyttää, voidaan käyttää tapaa 4 jolloin varoitusta ei tule, mutta generoidaan aivan vastaava koodi. Oleellista on, että sijoitus on suluissa (muuten tulisi sijoitus a =(b!=0) ). Mikäli asian toimimisesta on pieninkin epäilys kannattaa käyttää tapaa 1 tai 2!