Какая функциональность здесь запятая, почему она не вызывает ошибку времени компиляции?
Фрагмент кода:
#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 ...