Почему моя программа оценивает аргументы справа налево? - PullRequest
6 голосов
/ 12 июня 2019

Я изучаю C, поэтому я попробовал приведенный ниже код и получаю вывод 7,6 вместо 6,7.Почему?

#include <stdio.h>
int f1(int);
void main()
{
    int b = 5;
    printf("%d,%d", f1(b), f1(b));
}
int f1(int b)
{
    static int n = 5;
    n++;
    return n;
}

1 Ответ

11 голосов
/ 12 июня 2019

Порядок вычисления аргументов функции: неопределен в C. (Обратите внимание, что здесь нет неопределенного поведения; аргументы не могут быть оценены одновременно, например.)

Обычно оценка аргументов производится либо справа налево, либо слева направо.

Как правило, не вызывайте одну и ту же функцию дважды в списке параметров функции, если эта функция имеет побочные эффекты (как это имеет место в вашем случае), или если вы передаете один и тот же параметр дважды, что позволяет что-то в вызывающий сайт, который нужно изменить (например, передав указатель).

...