Этот фрагмент кода дает неожиданный результат. Когда я комментирую printf функции sumdig, возвращаемое значение a равно 6, а b равно 12, но при сохранении printf a равно 5, а b - 6. Пожалуйста, объясните.Как вы объясните несоответствие в выходе этого фрагмента кода?
main()
{
int a,b;
a = sumdig(123);
b = sumdig(123);
printf("\na=%d b=%d",a,b);
return 0;
}
int sumdig(int n)
{
static int s=0;
int d;
if(n!=0)
{
d=n%10;
n=(n-d)/10;
s=s+d;
sumdig(n);
}
else
return s;
printf("\n s=%d",s);
}
Каждый путь функции non-void должен возвращать значение. Если это не так, я думаю, что в C это только UB, если используется возвращаемое значение, но кому это нужно? Во всяком случае, разве ваш компилятор не предупредил вас? – Deduplicator
Что именно здесь вы называете неожиданным? Эффект добавления/удаления 'printf'? Или тот факт, что без 'printf' два, казалось бы, одинаковых вызова возвращают разные значения? – AnT