> if(-10 * abs(i - 1) == 10 * abs(i - 1)){
>Вопрос: почему так происходить в линуксе? В даном случаи есть понятие не определенность при компиляции. Разработчики могут на свое усмотрение вычислять в разной последовательности, даже в стандарте на компилятор указано что пока нет точки с запитой значение переменных не определено и может быть любое и только после точки с запитой выражение определено.
Если четко определить последовательность то все работает правильно:
int i = 2;
int k,l;
k = abs(i - 1);
k = -10 * k;
l = abs(i - 1);
l = 10 * l;