Неправильный вывод при запуске кода C [дубликата]

На этот вопрос уже есть ответ:

Почему эти конструкции используют неопределенное поведение до и после приращения? 14 ответов

Возможное дублирование:
Порядок оценки параметров перед вызовом функции в C

Для приведенного ниже кода я ожидал, что выходные данные будут 20 и 76, но вместо этого 75 и 21 будут выводиться. Пожалуйста, объясните, почему это так.

    #include<stdio.h>

    unsigned func(unsigned n)
    {

       unsigned int a =1 ;        
       static unsigned int b=2;        
       a+=b; b+=a;        
       {

         unsigned int a=3;        
         a+=b; b+=a;        
       }
       //printf("%d %d ",a,b);
       return (n+a+b);        
    }
    int main()
    {
        printf("%d %d\n",func(4),func(5));
        return 0;
    }

Ответы на вопрос(8)

Ваш ответ на вопрос