Почему цикл for не уменьшает значение в префиксной форме?
любой операнд, который вы поставите третьим аргументом будет выполнен в самом конце прохождения цикла.
1. В цикле for нету разницы между постфиксной или префиксной формы декремента/инкремента для переменной-счетчика. 
2. Первый проход цикла осуществляется с начальным значением i. Потом переменная-счетчик изменяется и второй проход цикла уже будет со значением i1 и т.д.
3. В вашем случае всё было сделано правильно:exl@exl-Lenovo-G560e:~/SandBox > cat test.cpp 
#include <iostream>

int main() {
    int f = 15;
    for(int i = --f; i > 0; --i)
        std::cout << i << " ";
    std::cout << std::endl;
    return 0;
}

exl@exl-Lenovo-G560e:~/SandBox > g++ test.cpp
exl@exl-Lenovo-G560e:~/SandBox > ./a.out 
14 13 12 11 10 9 8 7 6 5 4 3 2 1
Заметьте, что для значения, которым мы будем инициализировать переменную-счетчик, разница в декременте/инкременте есть:exl@exl-Lenovo-G560e:~/SandBox > cat test.cpp 
#include <iostream>

int main() {
    int f = 15;
    for(int i = f--; i > 0; --i)
        std::cout << i << " ";
    std::cout << std::endl;
    return 0;
}
exl@exl-Lenovo-G560e:~/SandBox > g++ test.cpp 
exl@exl-Lenovo-G560e:~/SandBox > ./a.out 
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1