Так после

#include <stdio.h>

int main(int argc , char *argv[])
{
    int n;
    n = _strlen_recursion("Corbin Coleman");
    printf("%d\n", n);
}
int _strlen_recursion(char *s)
{
   static int count = 0;    
   count++;  
   return (count), count = 0;
}

Где действует оператор запятой
0 можно увидеть на экране. Почему?

Итак, реальный вопрос: имеет ли return перегрузку (), как, скажем, sizeof?

c++ c
-3
Алексей Неудачин 25 Фев 2021 в 05:11

3 ответа

Лучший ответ

return не похож на sizeof. Операнд sizeof - это либо тип в круглых скобках, либо выражение.

Оператор return имеет только выражение (или ничего). Круглые скобки не являются частью грамматики оператора возврата. Скобки могут присутствовать только потому, что они являются частью выражения.

В return (count), count = 0; выражением является (count), count = 0. Это выражение-запятая. Он оценивает (count), отбрасывает полученное значение, затем оценивает count = 0. Его значением является присвоенное значение 0, так что это значение выражения запятой, поэтому возвращается 0.

0
Eric Postpischil 25 Фев 2021 в 03:33

В заявлении возврата return (count), count = 0;,

attr(optional) return expression(optional) ;  (1) 

Выражение (count), count = 0, как оператор запятой , 1-й операнд (count) оценивается, а результат отбрасывается, затем оценивается 2-й операнд count = 0, его значение 0 возвращается как возвращаемое значение оператора omma и возвращается как возвращаемое значение _strlen_recursion() позже.

2
songyuanyao 25 Фев 2021 в 02:21

Запятая действует как бинарный оператор в C так же, как +, -, & и все другие операторы в C. Он принимает два операнда и действует как точка последовательности. Левый операнд, (count) в вашем примере, оценивается, затем результат отбрасывается. Отсюда оценивается правый операнд count = 0 и возвращается его возвращаемое значение. В вашем примере левый операнд не имеет побочных эффектов, поэтому он по сути бесполезен. Строка return (count), count = 0; эквивалентна двум строкам

(void) (count);
return count = 0;

Обратите внимание, что count = 0 - это присваивание, а в C присваивания возвращают присвоенное значение, поэтому в этом случае из этого выражения возвращается 0, а в конечном итоге - функция.

1
BElgy 25 Фев 2021 в 02:16