Si bien es cierto que está bien usar tipos que concuerden entre sí, yo no recomendaría usar unsigned salvo que sea totalmente necesario.
Fíjate, por ejmeplo, en esto: (dia>=0) ? "menor":"mayor"
dia es unsigned, así que siempre va a ser mayor o igual a 0.
La lógica y las operaciones cambian, además de que conseguiremos fácilmente un underflow al andar haciendo restas sin comprobaciones (sin ir más lejos, si el dia o el mes de [1] es mayor que el de
Fíjate, por ejmeplo, en esto: (dia>=0) ? "menor":"mayor"
dia es unsigned, así que siempre va a ser mayor o igual a 0.
La lógica y las operaciones cambian, además de que conseguiremos fácilmente un underflow al andar haciendo restas sin comprobaciones (sin ir más lejos, si el dia o el mes de [1] es mayor que el de
- saldrán resultados incorrectos).
Y en cuanto a la pregunta original, comparar fechas es como restar. Si el mes de la fecha más alta es menor que el de la más pequeña, igual que en una resta: le restas 1 al año y le sumas 12 al mes. Parecido para los días.