Najbolje rešenje je ne reći to kompajleru nikako, već ubaciti runtime proveru
Code (c):
int v
= getINT
();
assert(v
!=0);
// some code
Ubacivanjem informacije kompajleru se uvodi više problema nego što se rešava. Mala je to optimizacija, a problem koji se uvodi je što nema garancija da će taj uslov uvek biti zadovoljen.
Danas je to tako, ali projekat će se sutra menjati, pa če 0 postati moguća povratna vrednost funkcije, pa će programski kod koji sledi iza dodele vrednosti promenljivoj v postati nekorektan, jer ne obrađuje slučaj v==0 kako treba.
Ukoliko se ubaci assert, onda će se zaista trošiti neznatno vreme na runtime proveru, ali će u navedenom slučlaju prilikom runtime testiranja program da zvekne i napisaće koji je assert pukao, pa će se otići na to mesto i promeniće se programski kod tako da obrađuje navedeni slučaj kako treba.
Ovde se ubacivanjem __assume proizvodi više problema nego što se rešava. Dobija se neznatno na performanasama, ali od tih par ciklusa je važnije da se projekat završi do kraja, da radi korektno i da se može lako održavati. Ja sam uvek za optimizaciju i nerazbacivanje resursa, ali treba voditi računa i o prioritetima.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.