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

时间:2019-05-06 18:50:48

标签: 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));
    }

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

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

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

它没有引起错误,因为您仅传递了一个参数。尽管有一个参数是一系列影响,估计为i