所以在
#include
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是吗?
发布于 2021-02-25 11:33:53
return并不类似于sizeof..。的操作数sizeof
是括号中的类型或表达式。
Areturn语句只有一个表达式(或没有)。括号不是return语句语法的一部分。括号可能只出现在表达式中,因为它们是表达式的一部分。
在return (count), count = 0;,表达式为
(count), count = 0..。这是一个逗号表达式。它评估
(count),则丢弃结果值,然后计算count = 0..。它的值是赋值的,0,所以这是逗号表达式的值,所以返回0。
发布于 2021-02-25 10:15:47
在返回statement](https://en.cppreference.com/w/cpp/language/return) [
return (count), count = 0;
attr(可选)返回表达式(可选);(1)
表达式为(count), count = 0,as逗号operator](https://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator) [,第一个操作数(count)被计算并丢弃结果,则第二个操作数count = 0的值,则其值作为omma运算符的返回值返回,并作为_strlen_recursion()晚点再说。
发布于 2021-02-25 10:16:04
逗号在C中的作用与二元运算符相同+ ,- ,&,C中的所有其他运算符都是这样做的。它接受两个操作数并充当序列点。左操作数,(count)在您的示例中,将计算结果,然后丢弃结果。从这里开始,右边的操作数,count = 0,并返回其返回值。在您的示例中,左操作数没有副作用,因此它基本上是无用的。这条线return (count), count = 0;相当于这两行
(void) (count);
return count = 0;请注意count = 0是一个赋值,在C中,赋值返回赋值的值,所以在本例中,这个表达式返回0,最终返回函数。
https://stackoverflow.com/questions/66361430
复制相似问题