Jo, to je celkem běžná začátečnická chyba, která se občas povede i profesionálovi
Jeden ze způsobů jak se jí vyhnout je použití
Yoda conditions, kde zpřeházíš pořadí, tak jako mistr Yoda měl zpřeházená slova ve větě. Místo
if (a=5)napíšeš
if (5=a)a překladač samozřejmě něco takového nemůže zkompilovat a vyhodí chybu. Zatímco porovnání
if (5==a)se zkompiluje a pracuje správně. Pochopitelně to funguje jenom tam kde porovnáváš s konstantou, když mezi sebou prohodíš dvě proměnné tak se jedna z nich stejně přepíše. A navíc to vypadá divně a blbě se to čte.
Takže nejdůležitější věc ze všeho, zapni si ve svém vývojovém prostředí zobrazování všech warningů, a při každé kompilaci jim věnuj velkou pozornost, protože tě můžou upozornit na potenciálně nebezpečné konstrukce jako je zrovna tahle! Například mě při použití
gcc -pedantic -Wall program.cvyběhne chyba
program.c: In function ‘main’:
program.c:7:5: warning: suggest parentheses around assignment used as truth value [-Wparentheses]takže hned vím že na řádku 7 je něco co musím zkontrolovat a případně opravit. Kdybych napsal jenom
gcc program.ctak se mi program bez stěžování zkompiluje i z chybou, já se vůbec nic nedozvím, a budu se strašně divit proč to dělá to co to dělá a ne to co jsem já chtěl aby to dělalo...