Dipende dalla semantica (stabilita dallo sviluppatore) della variabile "ultimo". Ovviamente in questo caso assumerebbe il significato di indice non valido. Ma formalmente il significato in effetti è arbitrario. Matematicamente meno uno significa... -1 (occhio alle conversioni in unsigned). ;-)

Io in tal caso preferirei usare due variabili: la prima "size_t" come indice, la seconda booleana (che ok in C non esiste) per "marcare" la sua validità o no.

Essenzialmente vi ha detto -1 per non complicarvi troppo il problema ;-)