Какая функциональность здесь запятая, почему она не вызывает ошибку времени компиляции?

Фрагмент кода:

#include <stdio.h>
int computeSum(int number1, int number2) {
    int sum;
    sum = number1 + number2;
    return sum;

}
int main()
{
      int sum = 0,k=0;

      k,sum= computeSum(4,2);
      printf("%d %d",sum,k);

     return 0;
}

Какова функциональность запятой (,) между k и суммой, почему она не вызывает ошибок? Каково ее значение?

3 ответа

Решение

Точно указано, значение оператора запятой в общем выражении

e1 , e2

это оценить подвыражение e1затем оцените e2; значение выражения является значением e2,

При компиляции вашей программы с gcc компилятор выдает предупреждение:

warning: left-hand operand of comma expression has no effect
k,sum= computeSum(4,2);
^

Причина в том, выражение

k,sum= computeSum(4,2);

это оценить подвыражение k а потом sum= computeSum(4,2);, Подвыражение k результат не используется.

Один оператор запятой, который вы используете, между выражением k и выражение присваивания просто создает одно выражение из двух выражений и упорядочивает их.

Конечно, первое выражение не имеет никакого эффекта, поэтому компилятор предупредит вас (если вы об этом попросите):

prog.c: In function 'main':
prog.c:12:8: warning: left-hand operand of comma expression has no effect [-Wunused-value]
   12 |       k,sum= computeSum(4,2);
      |        ^

k,sum= computeSum(4,2); просто получить значение к, а затем назначить сумму

возможно ты хотел сделать k = sum = computeSum(4,2);?

присваивание - это выражение, возвращающее значение, а не выражение, подобное if ...

Другие вопросы по тегам