a
se convierte al tipo de b
como por asignación.
(C99, 6.5.2.2p7) "Si la expresión que denota la función llamada tiene un tipo que hace incluir un prototipo, los argumentos se convierten implícitamente, como si por asignación, a los tipos de los parámetros correspondientes , tomando el tipo de cada parámetro como la versión no calificada de su tipo declarado ".
En su caso, si el valor que se va a convertir se puede representar en el nuevo tipo, no se modifica.
(C99, 6.3.1.3p1) "Cuando un valor con el tipo de número entero se convierte en otro tipo entero distinto de _Bool, si el valor puede ser representado por el nuevo tipo, es sin cambios."
de lo contrario, se convierte en una implementación de manera definida:
(C99, 6.3.1.3p3) "De lo contrario, el nuevo tipo se firma y el valor no puede ser representado en ella, ya sea el resultado está definido por implementación o se genera una señal definida por la implementación."