¿Cómo puedo escribir una macro 'clamp' / 'clip' / 'bound' para devolver un valor en un rango dado?

A menudo me encuentro escribiendo algo como

int computedValue = ...;
return MAX(0, MIN(5, computedValue));

Me gustaría poder escribir esto como una sola macro de una línea. Debe estar libre de efectos secundarios, de la misma manera que las macros existentes del sistema MIN y MAX, y debería funcionar para los mismos tipos de datos que MIN y MAX.

¿Alguien me puede mostrar cómo convertir esto en una sola macro?

Respuestas a la pregunta(5)

Su respuesta a la pregunta