Slusny clovek by to napsal takhle:
http://catcode.com/comments/2015/cf20151101.html
Kdybych už chtěl něco napsat přehledně a samodokumentačně, napsal bych to to já osobně nějak takto (za type si dosaďte nějaký konkrétní typ, neznám okolí kódu):
const type len_to_decrease = hlen + sizeof(struct frag_hdr);
const type reserve = 8;
if (mtu < len_to_decrease + reserve)
goto fail_toobig;
mtu -= len_to_decrease;
Tohle pochopí i idiot při prvním podívání, navíc je to optimalizované kompilátorem na nejvyšší míru.
Nicméně mně přijde ten původní kód i druhý kód čitelný. V tom druhém kódu bych se ale sakra ošíval, protože je nutné, aby dva výrazy byly při případné změně změněny najednou a stejně – a větší příspěvek k neudržovatelnosti a výrobě co nejzákeřnějších chyb snad ani neexstuje.
Ale já jsem jenom praktik, nejsem Linus.
Miloslav Ponkrác
Ten první kód je dost nepřehledný, není jasné, co se kam přiřazuje (všiml sis toho, že mtu je ve volání té funkce dvakrát?), a je hlavně špatně. C nedefinuje, kdy se identifikátor převede na hodnotu, takže změna mtu a zároveň jeho testování ve stejném ifu má nedefinovaný výsledek.