是否可以在 c 中传递两个参数?

Is it possible to pass two arguments in c?

我编写了一个 C 程序,其中我声明了一个函数 reverse(int i)。当我编译并 运行 程序时,它 运行 没问题,尽管传递了两个像这样 reverse((i++, i)) 的参数。为什么这不会导致语法错误? reverse 需要一个参数。

  #include <stdio.h>
    void reverse(int i);
    int main()
    { 
            reverse(1); 

    }
    void reverse(int i)
    {
            if (i > 5)
                    return ;
            printf("%d ", i); 
            return reverse((i++, i));
    }

(i++, i) 似乎执行 i++,然后评估为 i,最后一个操作数为 ,。你可以在这里看到:

// Notice the ( , )
int i = (puts("Inside\n"), 2); // Prints "Inside"

printf("%d\n", i); // Prints 2

它没有导致错误,因为你只传递了一个参数。不过,那个论点是一系列效果,评估结果为 i

您没有传递两个参数 - 那将是 reverse(i++, i)(由于 (i++i 之间缺少序列点,这会顺便调用未定义的行为) .

您将 (i++, i) 作为单个参数传递。由于它在额外的一对括号内,因此此处的逗号不会分隔函数的参数,而是充当逗号运算符。