Toisaalta usein voi tulla tilanne, jossa aliohjelman jatkaminen on kiinni siitä, tuleeko jostakin apualiohjelmasta virhe vai ei:
... string virhe; virhe = luo_taulukko(max_koko); if ( virhe != "" ) return virhe; ...
Tätä käsittelyä varten ei voida helpolla tehdä aliohjelmaa, mutta voidaan tehdä kyllä makro, jota voitaisiin kutsua:
IF_ERR_RETURN(luo_taulukko(max_koko));
Makron toteutus olisi vaikkapa seuraavanlainen:
#define IF_ERR_RETURN(v) { string virhe=(v); if ( virhe != "" ) return virhe; }