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

Dee*_*ner 2 c operator-precedence

我已经写了一个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));
    }
Run Code Online (Sandbox Code Playgroud)

sep*_*p2k 8

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

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


Car*_*ate 5

(i++, i)似乎要执行i++,然后求值到i的最后一个操作数,。您可以在这里看到:

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

printf("%d\n", i); // Prints 2
Run Code Online (Sandbox Code Playgroud)

它没有引起错误,因为您仅传递了一个参数。不过,那一个论点是一系列影响的评估结果i