Поскольку конструкция for(unsigned long i = 0; ...
допустима только в C99, я предполагаю, что вы не компилируете свой код как C99 (или ваш компилятор не совместим с C99).
Простой способ проверить это - переместить объявление i
в верхнюю часть блока кода.
Я предполагаю, что то, что вы показываете нам не во всем блоке компиляции, а в отрывках из него. Если это предположение неверно, а код, который вы показали, находится за пределами всех функций, то вам нужно заключить его в функцию, как объясняет @Keith Thompson.