Нет. Препроцессор работает перед компиляцией и, следовательно, перед выполнением.
Определение
#define substitute(id) var##id
приведет к расширению вашего цикла:
for(i; i < 5; i++)
{
printf("Valor: %i \n", vari);
}
Препроцессор не знает ни о переменной i, ни о ней.
Вероятно, вам следует использовать массив:
int var[5] = {999,998,997,996,995};
и доступ к нему через []
:
for(i; i < 5; i++)
{
printf("Valor: %i \n", var[i]);
}