A feltételes utasításnak két formája létezik:
if (kifejezés) utasítás vagy blokk
illetve
if (kifejezés) utasítás vagy blokk else utasítás vagy blokk
Mindkét forma végrehajtása a kifejezés kiértékelésével kezdõdik, és ha az igaz (nem 0), akkor az elsõ utasítás vagy blokk kerül végrehajtásra. A második formánál megadott második utasításra vagy blokkra akkor kerül a vezérlés, ha a kifejezés hamis (0 értékû). A pelda.c-ben szereplõ feltételes utasítás:
if (isupper(c)) { c = tolower(c); } else { c = toupper(c); }esetén a feltétel - isupper(c) - azt adja meg, hogy a c változóban lévõ karakter az angol ABC nagybetûje-e vagy sem. Ha a karakter nagybetû, akkor a c = tolower(c); utasítás segítségével a kisbetûs párjával helyettesítõdik, ha nem, akkor a c = toupper(c) utasítás csinál a kisbetûkbõl megfelelõ nagybetûket. Figyeljük meg, hogy bár mind az igaz, mind a hamis ág egyetlen utasításból áll, mégis blokkba foglaltuk õket. Ez nem kötelezõ, de az a meggyõzõdésünk, hogy ezzel a stílussal olvashatóbb, hibavédettebb programokat írhatunk. Mindenki igazat fog nekünk adni, aki - hozzánk hasonlóan - csak egyszer is keresett ilyenfajta hibát:
if (isupper(c)) c = tolower(c); else c = toupper(); fugg(c);ugyanis ez a programrészlet - az írásmóddal is jelölt - szándékunk ellenére a fugg függvényt minden esetben meghívja. A másik hasonló hiba:
if (a > b) if (a > amax) amax = a; else if (b > bmax) bmax = b;Az elõbbi kódrészlet elsõ ránézésre arra szolgál, hogy kiválasszuk a és b közül a nagyobbat, majd azzal - bizonyos feltételek tejesülése esetén - a megfelelõ változót felülírjuk. A kódrészletet azonban a fordító így értelmezi:
if (a > b) if (a > amax) amax = a; else if (b > bmax) bmax = b;ami teljesen mást jelent (például bmax csak úgy kaphat értéket, hogy a>b teljesül). Ennek oka az, hogy a fordító minden else-t a legközelebbi, õt megelõzõ, else nélküli if-hez kapcsolja. Ha azonban az általunk javasolt, blokkos formát alkalmazzuk
if (a > b) { if (a > amax) { amax = a; } /* endif a>amax */ } else { if (b > bmax) { bmax = b; } /* endif b>bmax */ } /* endif a>b */akkor a fenti hibákat nem követhetjük el. A blokkzáró } után álló megjegyzések összetett vezérlési szerkezetek esetén jelentenek hasznos fogódzkodót.