generalmente no uso las librerias del A/D en C18, sino que lo hago directamente configurando bits de los registros de configuración, de todas formas estuve viendo la documentacion del C18 y las librerias y puedo hacerte estos comentarios.
lo que te dice Suky esta bien, es para que puedas manejar valores con decimales, porque al realizar la división adc/255 seguramente te dará un valor no entero. Lo mismo con la multiplicación. Para eso tendrás que definir a va tipo float.
Lo que no entiendo bien es si este ejemplo te está funcionando, porque si el conversor que tienes es de 10bits (ejemplo 18F2455), y utilizas la función ReadADC() para obtener el valor de adc, este valor lo tendrías truncado, ya que ReadADC() te retorna un valor de 16bits y adc la has definido de 8bits.
No se bien como hace la división el C18, pero la divisíon por 255 que haces podrías hacerla mas eficiente si usas una rotación o shift.
Entonces te quedaría así
va = (adc >> 8) * 5;
Tambien, si solo te interesa el valor alto puedes usar directamente el valor del registro ADRESH